Galera,
Tenho uma página com um gridTable que deveria já vir populado ao entrar na tela com o seguinte código:
index.xhtml (Menu com link para minha action que popula a grid)
<p:submenu label="#{messages['sis.title.menu.item.administration']}">
<p:menuitem value="#{messages['sis.title.menu.subitem.users']}" action="#{usuarioMB.listUsuario()}" ajax="false" />
</p:submenu>
UsuarioMB.java (Aonde está a ação que popula a grid)
public String listUsuario() {
try {
usuarios = usuarioEJB.findAll();
} catch (Exception e) {
trataException(e);
}
return PAGE_LIST_USUARIO; // PAGE_LIST_USUARIO = "listUsuario"
}
faces-config.xml
<navigation-rule>
<navigation-case>
<from-outcome>listUsuario</from-outcome>
<to-view-id>/pages/protected/admin/listUsuario.xhtml</to-view-id>
<redirect />
</navigation-case>
</navigation-rule>
Desse jeito, quando entro no listUsuario onde a table deveria estar preenchida ela está vazia.
Já verifiquei que ao clicar no “link” ele chama minha ação corretamente, preenchendo minha propriedade com os dados corretos, porém, ao executar o “getUsuarios()” que deveria trazer minha lista já preenchida a lista está nula, como se estivesse ocorrendo uma segunda requisição (meu MB está com RequestScope).
Também já percebi que isso está acontecendo com commandButtons e commandLinks que tenho na aplicação, eles executam minha ação mas os objetos acabam nullos quando abre a página…
Eu já tenho uma solução, que é tirar o navigation-rule do faces-config e mudar o retorno da minha ação para o caminho completo até a página xhtml. Porém não quero ficar retornando Strings enormes…
Enfim, quero saber se esse é o comportamente correto e eu que estou viajando (por que funciona assim?) ou se implementei algo errado e desse jeito deveria funcionar mesmo…