Bom dia pessoal,
Tenho um formulário no qual a seleção de uma opção define quais campos estarão visíveis para preenchimento. Estou utilizando ajax. O código está da seguinte forma:
index.xhtml
<h:form>
<h:panelGrid columns="2" border="0" style="height:200px;">
<h:panelGroup>
<h:selectOneRadio value="#{usuarioBean.opcaoDesejada}" layout="pageDirection">
<f:selectItem itemValue="#{usuarioBean.opcao1}" itemLabel="Opção 1" />
<f:selectItem itemValue="#{usuarioBean.opcao2}" itemLabel="Opção 2"/>
<f:selectItem itemValue="#{usuarioBean.opcao3}" itemLabel="Opção 3"/>
<f:selectItem itemValue="#{usuarioBean.opcao4}" itemLabel="Opção 4"/>
<f:ajax render="panel" listener="#{usuarioBean.opcaoSelecionada}" />
</h:selectOneRadio>
<br /><br /><br />
</h:panelGroup>
<h:panelGroup id="panel" style="margin-left:50px; vertical-align: top;">
<h:panelGroup rendered="#{usuarioBean.codigoVisivel}">
<h:outputText value="ID:" /><br />
<h:inputText value="#{usuarioBean.codigo}" />
</h:panelGroup>
<h:panelGroup rendered="#{usuarioBean.inscricaoVisivel}">
<h:outputText value="Inscrição:" /><br />
<h:inputText value="#{usuarioBean.inscricao}" />
</h:panelGroup>
...
</h:panelGroup>
</h:panelGrid>
<h:commandLink action="#{usuarioBean.pesquisar}" >
<h:graphicImage style="border:0px;" alt="Pesquisar" value="/resources/pesquisar.jpg" />
</h:commandLink>
</h:form>
O Ajax funciona normalmente. Só que, no UsuarioBean, sempre que envio o formulário (clico no link Pesquisar), os valores dos campos (codigo e inscricao) estão vindo nulos. O problema está relacinado à visibilidade, creio, pois, se eu forço no bean, por exemplo, o valor do campo usuarioBean.codigoVisivel sempre como true, ele recupera o valor digitado normalmente.
Meu UsuarioBean está com escopo Request, o que significa que a cada requisição ajax um novo objeto é criado. Eu testei mudar o escopo para View, nesse cenário o problema é que perco os valores quando navego para a próxima página (após enviar a requisição dessa página, vou para outra de listagem).
@ManagedBean
@RequestScoped
public class UsuarioBean implements Serializable {
private String codigo;
private String inscricao;
private boolean codigoVisivel;
private boolean inscricaoVisivel;
public String pesquisar(){
System.out.println("Chamada para pequisa");
return "listaUsuarios";
}
public void opcaoSelecionada(AjaxBehaviorEvent event) {
//seta visibilidade de acordo com a opção
}
//getters e setters
}
Gostaria ao máximo evitar colocar o bean com escopo sessão. Alguém tem alguma idéia?
Obrigada.
);