Ajax4JSF erro no a4j:support

Boa tarde senhores 8)
Estou com problemas ao usar a tag support do Ajax4JSF.

Tenho 3 combos na minha tela, onde a escolha da primeira renderiza a segunda e a escoha da segunda renderiza a terceira, tudo isso feito em ajax com a tag support.
Quando a pagina eh carregada, apenas a primeira combo está com os valores, a segunda e a terceira estão vazias.
Quando escolho um item na primeira combo, ele renderiza certinho a segunda, porém quando seleciono um item da segunda, ele não renderiza a terceira.

Estou achando que o problema é do Ajax4JSF na hora de tentar chamar o método que busca a lista da terceira combo. Fiz um teste onde ao carregar a página, a segunda combo já vem preenchida, ao selecionar a segunda, ele carregou corretamente a minha terceira combo.
É como se o Ajax4JSF não conseguisse executar o metodo que definí na tag support quando essa lista eh carregada dinamicamente.

Resumindo…
Quando a lista é carregara ao carregar a página, o refresh de combo funciona perfeito, quando a lista eh carregada dinamicamente, o refresh de combo não funciona.

Combo1:

<h:selectOneMenu value="#{RebanhoBean.rebanhoSimplesId}" required="false">
	<f:selectItem itemLabel="Selecione" itemValue="0"/>
	<s:selectItems value="#{RebanhoBean.rebanhosSimples}" var="rebanhoSimples" itemLabel="#{rebanhoSimples.nome}" itemValue="#{rebanhoSimples.id}" />
	<a4j:support event="onchange" action="#{RebanhoBean.getEspeciesByRebanho}" ajaxSingle="true" reRender="especies, racas" />
</h:selectOneMenu>

Combo2:

<h:selectOneMenu value="#{RebanhoBean.especieId}" required="false" id="especies">
	<s:selectItems value="#{RebanhoBean.especies}" var="especie" itemLabel="#{especie.nome}" itemValue="#{especie.id}" />
	<a4j:support event="onchange" action="#{RebanhoBean.getRacasByEspecie}" ajaxSingle="true" reRender="racas" />
</h:selectOneMenu>

Combo3:

<h:selectOneMenu value="#{RebanhoBean.racaId}" required="false" id="racas">
	<s:selectItems value="#{RebanhoBean.racas}" var="raca" itemLabel="#{raca.nome}" itemValue="#{raca.id}" />
</h:selectOneMenu>

Olha, eu nao uso o ajax4jsf, entao se o que eu disser aqui nao se aplicar, alguem me corrija, por favor. Eu uso o suporte a ajax Facelets 1.2 e vou falar pelo que sei dele, mas acredito que pode ser o mesmo no caso do ajax4jsf.
Supondo que tua pagina está no escopo request, quando voce carrega a página o 1o combo vem preenchido e vc consegue modificar o 2o. Porém, no segundo request (quando vc tenta atualizar o valor do 3o combo) os valores do primeiro request já se foi… entao pode ser que o valor do 1o combo já nao está disponível, e com isso ele nao consegue montar o 2o combo e consequentemente nao monta o 3o combo também. Se for isso, deve estar dando um erro de validação. Na sua página tem um h:messages pra ver se é isso mesmo?
Nao esqueça que por estar fazendo com ajax, a área do h:messages nao será atualizada, entao vc tem que atualizar ela.
Por acaso quando voce faz sem ajax funciona?
Caso o problema seja esse, voce pode usar o componente t:saveState do tomahawk que é uma maravilha pra esses casos.

Espero ter ajudado…

Opa! :smiley:
Valeu mesmo cara! Deu certo! :lol:
Primeiro mudei o escopo dele pra session e vi q funcinou!
Ai voltei ele pra request e coloquei:

<t:saveState value="#{RebanhoBean.rebanhosSimples}" /> <t:saveState value="#{RebanhoBean.especies}" />

E funcinou certinho :wink:
Era exatamente oq vc tinha pensado… no segundo request ele perdia a referencia da primeira combo!
Thanx dude! :stuck_out_tongue:

Amigo, aonde vc pos esses savestates? To com o mesmo problema, mais quando eu coloco isso diz q a propriedade nao existe. Passae o exemplo completo se possivel. Vlw

Tb gostaria de saber como usar esse saveState.
Preciso resolver esse problema de usar selectOneMenu com essa tag sevaState, mas nao sei como…
Agradeco as respostas…

Ja tentei utilizar o saveState e nao obtive muito sucesso. Porem usando a API do JBoss RichFaces e Ajax4JSF, existe o keepAlive, que em teoria faz a mesma coisa e de fato funciona, ja resolvi esse problema utilizando ele, se for o caso vcs podem procurar algo sobre. O keepAlive ele faz o seu objeto ficar retido na sessão ate que vc faça um novo request em uma pagina diferente, ele extende a vida de um objeto request a um tipo de scopo sessao diferenciado.

Aonde você mudou o scopo para session? No faces config?

Um ano e pouco depois…

Só mudar o valor a tag para session no faces config…

<managed-bean>
        <managed-bean-name>ClasseBean</managed-bean-name>
        <managed-bean-class>br.seila.ClasseManagedBean</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
</managed-bean>