Chamar método com p:ajax dentro de um p:selectOneMenu

21 respostas
Diego_Adriano

Bem galera seguinte.
Preciso chamar um método dentro de um selectOneMenu, estou tentando fazer isso com Ajax mas não estou encontrando o “Evento” que faça isso !
Estou fazendo dessa forma:

<p:selectOneMenu value="#{permissoesBean.grupoUsuario}" converter="ConverterGrupoUsuario"> <f:selectItem itemLabel="Selecione o Grupo" itemValue=""/> <f:selectItems value="#{permissoesBean.grupoUsuarios}" var="grupo" itemLabel="#{grupo.nome}" itemValue="#{grupo.id}"/> <p:ajax update="formPermissoes:gridDadosPermissao" event="itemSelect" listener="#{permissoesBean.escolherPermissao}" /> </p:selectOneMenu>
O problema é que utilizando esse evento “itemSelect”, ele me diz que a tag n é suportada, claro, deve ser por causa da versão do Prime que uso que é um pouco mais antiga.
Pois bem, teria algum outro evento que fizesse essa mesma ação ?!

Obrigado desde já !!

21 Respostas

Daniel_T_S

Se você quer que o método seja chamado ao selecionar um item tente:

<p:ajax event="change" listener="#{permissoesBean.metodoDesejado}" update="formPermissoes:gridDadosPermissao"/>

Valeu.

Diego_Adriano

Vlw parceiro mas não chama cara … que zebra … rs

Daniel_T_S

Coloca aí o método que você está tentando chamar.

Diego_Adriano
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ //BUSCA DADOS PERMISSÃO POR GRUPO ESCOLHIDO /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
public void escolherPermissao() {  
	System.out.println("Antes: "+grupoUsuario.getPermissao().getId());
	if(grupoUsuario !=null && !grupoUsuario.equals("")){
       	System.out.println("Teste: "+grupoUsuario.getPermissao().getId());
       	PermissoesRepository pr = new PermissoesRepository(getEntityManager());
       	permissao = pr.permissaoPorId(grupoUsuario.getPermissao().getId());
        	
       }
   else{
     	FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(
		FacesMessage.SEVERITY_WARN,""+getUsuarioSessao().getNome()+ 
			" - INFORME UM GRUPO VÁLIDO",""));
        }
              
    }
Daniel_T_S

Esses prints estão sendo executados?

Se estiverem o evento está funcionando, então você precisará colocar as permissões retornadas
como resultado da pesquisa na List que o teu “gridDadosPermissao” acessa.

Diego_Adriano

Cara, vc ta de sacanagem cmg né ?! rsrsrsrs
É exatamente pelos System.Out não serem exibidos que sei que não esta chegando no método …rs

felipe_gdr

Diego Adriano:
Cara, vc ta de sacanagem cmg né ?! rsrsrsrs
É exatamente pelos System.Out não serem exibidos que sei que não esta chegando no método …rs

Diego, tenha mais paciencia. Ainda mais com pessoas que estao tentando te ajudar.

Tente assim

<p:ajax update=“formPermissoes:gridDadosPermissao” listener="#{permissoesBean.escolherPermissao}" />

sem a tag event

Diego_Adriano

Meu querido Felipe, se vc não percebeu isso foi uma ironia, não uma falta de respeito cara, sou muito grato por tds que tentam ajudar, tenha certeza disso …

Já, já tentei isso, é dessa forma que o site do Prime sugere que seja feito mas não funfa tb …

Obrigado

felipe_gdr

Diego Adriano:
Meu querido Felipe, se vc não percebeu isso foi uma ironia, não uma falta de respeito cara, sou muito grato por tds que tentam ajudar, tenha certeza disso …

Já, já tentei isso, é dessa forma que o site do Prime sugere que seja feito mas não funfa tb …

Obrigado

Beleza! :wink:

Estranho… seu componente está dentro de um form?

Diego_Adriano

Esta sim .. tudo como manda o figurino ..rs
Mas ainda creio que deva ser o evento que não esta correto !!

<ui:composition template="/tamplate/tamplate.xhtml">
	<ui:define name="center">
	    <p:panel header="Permissões">
	    	<h:form id="formPermissoes">
	    		<p:messages autoUpdate="true"/>
				
				<br/>
				<p:separator/>
				<br/>
					
				<h:panelGrid style="text-align:center; align:center;">
					<p:column>
						<p:commandButton value="Salvar" ajax="false" 
							   icon="ui-icon ui-icon-disk"/>
						<p:commandButton value="Atualizar" ajax="false"
							   icon="ui-icon ui-icon-refresh"/>
						<p:commandButton value="Limpar" icon="ui-icon ui-icon-trash" 
													immediate="true" process="@this">
							<pe:resetEditableValues for="formPermissoes"/>
						</p:commandButton>	
					</p:column>
				</h:panelGrid>
				<br/>
				<p:separator/>
					<h:panelGrid columns="2" columnClasses="colunaEsquerda, colunaDireita">
						<p:selectOneMenu value="#{permissoesBean.grupoUsuario}" converter="ConverterGrupoUsuario">
							<f:selectItem itemLabel="Selecione o Grupo" itemValue=""/>
							<f:selectItems value="#{permissoesBean.grupoUsuarios}" 
										   var="grupo"
										   itemLabel="#{grupo.nome}"
										   itemValue="#{grupo.id}"/>
								<p:ajax update="formPermissoes:gridDadosPermissao" event="change"
										listener="#{permissoesBean.escolherPermissao}" />		   
						</p:selectOneMenu>
					</h:panelGrid>	
				<p:separator/>
				<br/>
				
				<h:panelGrid columns="7" columnClasses="colunaEsquerda, colunaDireita" id="gridDadosPermissao">
felipe_gdr

Diego, suspeito que seja algum erro de validação tente colocar o seu message no update, para ver se alguma mensagem aparece ou então coloque um immediate=true para evitar validações.

Diego_Adriano

Então, não tem o que validar na página! Se eu tentar com um commandbutton o método é chamado …

felipe_gdr

Entendi… então quando o método é chamado pelo commandButton a propriedade permissoesBean.grupoUsuario possui o valor selecionado, conforme esperado?

A fase de validação existe, mesmo que implicitamente. Nela são validados os tipos de dado, como integer e date dos inputs. Também há a fase de conversão. Existe a possibilidade de haver algo errado no seu converter?

Diego_Adriano

Sim, os valor são trazidos seu tiver um commandbutton …
Quanto aos convertes funcionam perfeitamente, inclusive coloquei um println dentro para ver e as conversões ocorrem perfeitamente …

Só sobrou o Evento do Ajax …rs

Daniel_T_S

Diego Adriano:
Cara, vc ta de sacanagem cmg né ?! rsrsrsrs
É exatamente pelos System.Out não serem exibidos que sei que não esta chegando no método …rs

Diego desculpa se você achou uma pergunta tola, era apenas pra ter certeza.

Estou no trabalho agora, mas quando chegar em casa posso colocar um código mostrando
como foi que fiz isso.

Valeu.

Diego_Adriano

Relaxa meu querido !!!
Bele !! Abraços !!

fagajr

Meu querido…

Tópico antigo, mas no método vc tem que criar um AjaxBehaviorEvent event e trabalhar com esse event.

e depois fazer a comparação event.getComponent().getAttributes().get(“value”).toString().trim().equalsIgnoreCase(“bilhetador”) com o campo que passou no xhtml.
por ex:

public void visualizar(AjaxBehaviorEvent event) throws Exception{ if(event.getComponent().getAttributes().get("value").toString().trim().equalsIgnoreCase("bilhetador")){ //seu código aqui } }

meu xhtml

<p:selectOneMenu id="campo" value="#{mbMxdr.campo.tipo}" styleClass="fonte"> <f:selectItem itemLabel="Selecione" itemValue="empty" /> <f:selectItems value="#{mbMxdr.campos}" /> <p:ajax event="change" update="@form, valor, valors" listener="#{mbMxdr.visualizar}"/> </p:selectOneMenu>

thiagotigaz

Galera para responder, o mais simples de tudo que ninguem nem citou.

Sei que a pergunta é antiga, mas pode ajudar muita gente que procura por isso e ainda cai nesse post.

So funciona dentro de um FORM

bota tudo entre <h:form></h:form>

abracos

B

Mude isso: “formPermissoes:gridDadosPermissao” para isso: “formPermissoes”

Ou senão cria um id para p:selectItem e coloque: “formPermissoes:ID_CRIADO_PARA_P:SELECTITEM”.

Mike

A última mensagem do tópico foi em 2015, acho que ele ja resolveu haha

Mas aproveitando, caso alguém queira chamar um método do bean ao selecionar um item do selectOneMenu, basta utilizar o evento itemSelect e obrigatoriamente o método tem que ser void

<p:selectOneMenu ...>
        ....
         <p:ajax event="itemSelect" process="@this" listener="#{meuBean.meuMetodo}">
    </p:selectOneMenu>

PS: É importante ressaltar que só deve processar e dar update no que for realmente necessário

Diego_Adriano

Nossa !! Faz tempo mesmo !! Nem lembrava do tópico mais … Vou ter que dar uma revisada nos códigos pra ver como resolvi isso ai !
Mas valeu galera !!
Abraços

Criado 23 de abril de 2013
Ultima resposta 4 de dez. de 2018
Respostas 21
Participantes 7