Utilizando Navegação em JavaServer Faces
Hoje em dia em desenvolvimento de aplicações Java é padrão utilizar o Modelo Model-View-Controller...
Utilizando Navegação em JavaServer Faces
Hoje em dia em desenvolvimento de aplicações Java é padrão utilizar o Modelo Model-View-Controller. Quando utilizamos framework JavaServer Faces, por padrão estamos adotando este modelo, onde dividimos nossa aplicação em camadas.
Neste artigo irei abordar a navegação (Controller) utilizada em faces. Onde a navegação é pré-configurada para atender a navegação do usuário que está utilizando o sistema.
Em uma aplicação web simple, a navegação entre páginas é estática. Em uma aplicação utilizando Faces a ação deve coincidir com o outcome (resultado) de uma regra de navegação. Na listagem 01 veja como acontece está configuração:
<navigation-rule>
<from-view-id>/index.jsp</from-view-id>
<navigation-case>
<from-outcome>login</from-outcome>
<to-view-id>/welcome.jsp</to-view-id>
</navigation-case>
</navigation-rule>
Listagem 01
Na listagem 01, uma determinada ação realizada pelo usuário na página índex.jsp, por exemplo, um click em um botão (<h:commandButton label="Login" action="login" />) com o atributo action e valor login, direciona o usuário para a página welcome.jsp, veja a figura 01:
Figura 01
Observe que as strings view-id devem começar com /. A extenção deve coincidir com a extensão do arquivo ( .jsp ), não com a extensão da URL. Por exemplo, se usar um from-view-id de /índex.faces ou /índex.jsf, a regra não funcionará.
Você pode agrupar várias regras de navegação, por exemplo, você poderia ter botões com ação logout espalhados por todas as páginas da sua aplicação. É possível fazer com que todos esses botões naveguem para a página logout.jsp com apenas a seguinte regra.
<navigation-rule>
<navigation-case>
<from-outcome>logout</from-outcome>
<to-view-id>/logout.jsp</to-view-id>
</navigation-case>
</navigation-rule>
Note que essa regra se aplica a todas as páginas porque não foi especificado nenhum elemento from-view-id. Você pode unir várias regras de navegação.
<navigation-rule>
<from-view-id>/index.jsp</from-view-id>
<navigation-case>
<from-outcome>login</from-outcome>
<to-view-id>/welcome.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>signup</from-outcome>
<to-view-id>/newuser.jsp</to-view-id>
</navigation-case>
</navigation-rule>
Na maioria das aplicações web, a navegação não é estática, ou seja, com o outcome definido no objeto (ex, botões, links etc...). O fluxo das páginas não depende apenas de qual botão você clicar, mas também das entradas que você fornecer. Submeter uma página de login, por exemplo, pode gerar dois resultados: acesso ou falha. O resultado depende de uma computação, ou seja, se o nome do usuário e a senha são legítimos.
Para implementar a navegação dinâmica, o botão de submissão deve ter uma referência a método, como:
<h:commandButton label="Login" action="#{loginController.verifyUser}" />
Uma referência a método em um atributo action não tem nenhum parâmetro e tem um tipo de retorno String. Por exemplo, o método verifyUser deveria se parecer mais ou menos com o seguinte:
String verifyUser() {
if(...)
return “success”;
else
return “failure”;
}
O método retorna uma string de resultado com o ”success” ou “failure”. O handler de navegação usa a String da referência a método. Um método de ação pode retornar nulo para indicar que a mesma página deve ser re-exibida.
Conclusões
Neste artigo, vimos um pouco de como funciona o handler de navegação em Faces, utilizando navegação estática e navegação dinâmica. Nos próximos artigos irei falar mais sobre mais funcionalidades do framework. Bom, é isso! Qualquer dúvida fique a vontade para fazer contato e trocar algumas idéias ;-)
Referências
Core JavaServer Faces - http://www.horstmann.com/corejsf/
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo