JSF2 - f:ajax e f:param

E ai galera… já peço desculpas se alguém já respondeu a essa dúvida aqui…mas procurei e não achei nada…
meu problema é seguinte, no jsf 1.x eu conseguia fazer:

<a4j:support event="onChange".. required="#{empty param['skipvalidation']}">
<f:param name="skipvalidation" value="1"/>
</a4j:support>

tentei fazer o mesmo no jsf2 e não estou conseguindo… nem mesmo o método do listener é chamado e nem o model é atualizado. Alguém saberia dizer o pq e
como eu poderia fazer a mesma coisa agora?
segue o código na versão jsf2

<f:ajax event="change" required="#{empty param['skipvalidation']}">
<f:param name="skipvalidation" value="1"/>
</f:ajax>

tenta passar onchange no evento em vez de somente change

Na verdade, o JSF2.0 você retira o on na frente dos eventos.

O que eu não vi foi o código que você chama o listener. Na tag f:ajax tem um método que você lista qual ação será de listener.

Eu não coloquei porque eu realmente não preciso que nenhum método seja chamado. Eu só queria que o model
fosse atualizado com a nova informação selecionada.
mas testando, coloquei o

<f:ajax event="change" required="#{empty param['skipvalidation']}" listener="#{testeMB.acaoSelecaoCampo}"> 
...

e no Java

public void acaoSelecaoCampo(AjaxBehaviorEvent event){
System.out.println("teste");
}

Tenta colocar o required="#{empty param[‘skipvalidation’]}" no campo que você quer não seja/ou seja validado ao invés de colocar no ajax.

puts… pera galera… coloquei o código errado… mall… viajei aqui… quanto tu falou ai eu fui olhar o código…
o código é o seguinte (vou postar só o jsf2):


<h:selectOneMenu id="parametroTipo"
			value="#{testeMB.bean.tipoParametro}"
			required="#{empty param['skipvalidation']}">
												
				<f:selectItem itemLabel="" />	
				<f:selectItems
					value="#{testeMB.listaTipoParametro}"
					var="tipoParametro" itemValue="#{tipoParametro}"
					itemLabel="#{tipoParametro.descricao}" />
<f:ajax event="change" execute="@this" render="parametroTipo">													
<f:param name="skipvalidation" value="1"/>
</f:ajax>
</h:selectOneMenu>

Foi mal ai… errei feio agora… esse é o código que

Esse cara é um objeto ou string? tipoParametro

Se for objeto vc tem que criar um converter para ele.

Opa jakefrog…
é um objeto… eu retirei a linha do converter só pra reduzir mais o código… mas tem o converter pra ele…

O converter está sendo chamado?

Quando o <f:param> está dentro do <f:ajax>, o evento nem é disparado. (nem o converter é chamado)

Deixa ver se eu entendi.

Vc ta querendo que ele se altere? É isso?

<h:selectOneMenu id="parametroTipo" ... render="parametroTipo"

Isso… eu quero que ao mudar o valor no select, o model já seja atualizado com o novo valor.

Não sei muito bem como está seu código, acho que já sei seu problema.

estou acabando de escrever um post sobre isso. :shock:

Espero o post ficar pronto ou te ajudo agora… xa eu ver… :twisted:

Vamos lá, primeira tentativa, coloca seu <h:select dentro de um <h:panelGroup e manda o render no panelGroup e não no seu select apenas.

jakefrog… eu consegui resolver colocando o <f:param> fora da tag a4j:ajax.
antes de tentar isso, coloquei o h:panelGroup mas não funcionou. Com a tag <f:param> dentro
da do ajax, nada era chamado, como se a tag do ajax não existisse.
Segue o código funcionando:

<h:selectOneMenu id="parametroTipo"  
            value="#{testeMB.bean.tipoParametro}"  
            required="#{empty param['skipvalidation']}">  
                                                  
                <f:selectItem itemLabel="" />   
                <f:selectItems  
                    value="#{testeMB.listaTipoParametro}"  
                    var="tipoParametro" itemValue="#{tipoParametro}"  
                    itemLabel="#{tipoParametro.descricao}" />  
<f:ajax event="change" execute="@this" render="parametroTipo">                                                      
</f:ajax> 
<f:param name="skipvalidation" value="1"/>
</h:selectOneMenu>