GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

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


#1

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á !!


#2

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.


#3

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


#4

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


#5

/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
//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",""));
        }
    }

#6

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.


#7

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


#8

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

Tente assim

sem a tag event


#9

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


#10

Beleza! :wink:

Estranho... seu componente está dentro de um form?


#11

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">

#12

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.


#13

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


#14

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?


#15

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


#16

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.


#17

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


#18

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>

#19

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

abracos


#20

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

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