JSF - Problemas com rendered

Pessoal, estou com um problemão aqui… em uma certa tela do meu sistema, eu preciso exibir uma série de campos, em relação ao que foi selecionado em um certo campo… algo como:

<t:selectOneMenu onchange="submit();" binding="#{featureMBean.primeiroMenu}" value="#{featureMBean.primeiroId}" converter="javax.faces.Long">
	<f:selectItems value="#{featureMBean.listItensPrimeiro}" />
</t:selectOneMenu>

<t:selectOneMenu rendered="#{featureMBean.primeiroId eq 1}" value="#{featureMBean.segundoId}" converter="javax.faces.Long">
	<f:selectItems value="#{featureMBean.listItensSegundo}" />
</t:selectOneMenu>

<t:selectOneMenu rendered="#{featureMBean.primeiroId eq 2}" value="#{featureMBean.terceiroId}" converter="javax.faces.Long">
	<f:selectItems value="#{featureMBean.listItensTerceiro}" />
</t:selectOneMenu>

O problema é que os selects 2 e 3 não são setados no submit. Depois de vários testes deduzimos que durante a construção da árvore de componentes, o “rendered” do select 2 e 3 dá false, pois o “primeiroId” ainda está sem valor, assim o select não é incluído na árvore, ou algo assim, pois nem sequer o método de setSegundoId ou setTerceiroId é chamado. Se tirarmos o “rendered” de qualquer um dos dois selects, os valores são passados normalmente.

Alguém sabe o que pode estar acontecendo?

Abraço!

Fala…

Bom, quanto ao rendered… quando um componente está com rendered igual a false, ele não será renderizado na página, e consequentemente o form não será capaz de fazer submit dos valores destes componentes…

o que vc precise (se é que eu entendi bem o que vc está querendo), é de utilizar algum o richFaces por exemplo, para fazer o “reRender” dos componentes que vc deseja que tenham seus valores atualizados… utilizando a tag a4j:support vc conseguirá obter um bom resultado…

http://docs.jboss.org/richfaces/latest_3_3_X/en/devguide/html/a4j_support.html

[quote=mgarcia]Fala…

Bom, quanto ao rendered… quando um componente está com rendered igual a false, ele não será renderizado na página, e consequentemente o form não será capaz de fazer submit dos valores destes componentes…[/quote]

É quase isso. Na verdade, quando a tela abre, somente o primeiro está renderizado, então eu seleciono alguma opção, e ele faz um submit, renderizando a tela denovo. Aí sim o select 2 ou 3 será renderizado, dependendo de qual valor foi selecionado no select 1.

O problema é que quando eu dou o submit denovo (em um commandButton), o primeiro vem preenchido certinho, mas o 2 e o 3 vem nulos, não importando se eles estavam renderizados e com valores selecionados quando o submit “final” foi dado.

Não sei se fui claro o suficiente =D

oque o mgarcia falou ta certo, tu precisa de um componente pra dar um reRender ( richfaces ) ou um update ( primefaces )

se for usar richfaces,

tu envolveria o segundo e o terceiro t:seleconemenu em: um a4j:outputpane</a4j:outputpanel> (um output panel pra CADA tselectonemenu) e nele tu colocaria a expressao do rendered…
(tem que definir um atributo ID do outputpanel 2 e do 3 )

dae dentro do primeiro, tu colocaria um a4j:support ( caso jsf 1.2 )ou um p:ajax (senao me engano do prime )

<t:selectOneMenu onchange="submit();" binding="#{featureMBean.primeiroMenu}" value="#{featureMBean.primeiroId}" converter="javax.faces.Long"> <f:selectItems value="#{featureMBean.listItensPrimeiro}" /> <a4j:support event="onchange" rerender="ID-DO-TSELECTONEMENU-outputpanel"> </a4j:support> </t:selectOneMenu>

e no terceiro, seria a mesma ideia, mas tu colocaria o a4j:support dentro do “2” tselectonemenu apontando pro terceiro id.

da uma olhada na documentacao do richfaces/primefaces pelo link do mgarcia…

[quote=jadsonuch]oque o mgarcia falou ta certo, tu precisa de um componente pra dar um reRender ( richfaces ) ou um update ( primefaces )

se for usar richfaces,

tu envolveria o segundo e o terceiro t:seleconemenu em: um a4j:outputpane</a4j:outputpanel> (um output panel pra CADA tselectonemenu) e nele tu colocaria a expressao do rendered…
(tem que definir um atributo ID do outputpanel 2 e do 3 )

dae dentro do primeiro, tu colocaria um a4j:support ( caso jsf 1.2 )ou um p:ajax (senao me engano do prime )[/quote]

Pois é, eu tava olhando isso, e levantei essa questão aqui. Mas o problema é que não podemos usar o richfaces ou primefaces… somente tomahawk, algo a ver com sistema legado ou coisa assim. Estou fazendo alguns testes com o saveState do tomahawk, mas não surte efeito nenhum.

Ah sim, e o jsf que estamos usando é 1.1