JSF Mini Livro – Dicas, conceitos e boas práticas

93

Posted on September 2, 2012 by

Share it now!

Quando utilizar “action” ou “actionListener”

Toda requisição feita pelo usuário ao sistema pode-se entender como uma ação. Essa ação pode ter vários efeitos diferentes como alterar um registro no banco de dados, algum arquivo físico, uma navegação entre páginas, exibir uma informação, etc.

O JSF separa basicamente em dois modos esses tipos de ações: “com navegação” e “sem navegação”. As ações com navegação seriam as navegações em que direcionamos o usuário para outra tela como resultado final de uma ação a exemplo: “cadastrar uma cidade”, “entrar e sair do sistema”, etc. As ações sem navegação geralmente são chamadas Ajax ou chamadas de preparação para alteração do estado de objetos que estão na memória.

É preciso ter em mente que uma ação que gera uma navegação nem sempre irá levar o usuário para outra tela; no caso de um cadastro se o usuário não digitou todos os campos necessários ele continuará na tela e receberá uma mensagem de aviso notificando dos erros.

Ao utilizar os componentes “h:commandLink” e “h:commandButton”, os mais utilizados em ações, é possível ver a existência dos parâmetros “action” e “actionListener”. Podemos definir que “action” são as ações que utilizam navegações e “actionListener” como ação de requisição Ajax ou que irá modificar/preparar algum objeto sem navegação.

O modo correto de utilizar o “action” é apontar para um método de ManagedBean que em sua assinatura retorne uma String. A assinatura “public String cadastrar()” é uma assinatura válida de uma action. A String retornada irá indicar qual será o destino da ação solicitada pelo usuário. Após o retorno da String pelo método, o JSF tomará os seguintes passos:

  • Caso o valor retornado seja “null” o usuário permanecerá na mesma tela.
  • Caso o valor não tenha uma extensão válida, a extensão da view atual será utiliza. Ex.: Se na página “cadastro.xhtml” o método chamado retornar “paginaInicial” o JSF irá tratar como “paginaInicial.xhtml”.
  • Caso o valor retornado não comece com “/” o JSF irá tratar como “/paginaInicial.xhtml”.
  • O JSF irá verificar também regras de navegação incluídas no faces-config.xml
  • Qualquer valor retornado que não seja “null” fará com que o valor da view atual seja apagado. Imagine que o usuário está na página “cachorroCadastro.xhtml”, se o retorno do método for “null” o usuário continuará na página com os mesmos valores e uma nova navegação não será iniciada; caso o retorno seja a String “cachorroCadastro.xhtml” uma nova navegação será iniciada.

Já o “actionListener” requer uma assinatura diferente. Uma assinatura válida de um “actionListener” seria: “public void validarUsuario(javax.faces.event.ActionEventevent)”.

Em um botão é possível ter as duas chamadas ao mesmo tempo: “<h:commandButton action= “userMB.cadastrarUsuario” actionListener= “userMB.validarUsuario” />”. Repare que o click do botão chamará um método para validarUsuario e em outro é ação é para cadastrar o usuário.

Uma ação “actionListener” costuma ser utilizada muito nos componentes de view. Em um componente de paginação, seria utilizada uma ação de um actionListener para mudar as páginas que estão sendo exibidas sem executar uma navegação. Infelizmente pessoas acabam não utilizando esse recurso do modo correto e acabam por encontrar mais dificuldades do que necessário. Para fazer uma navegação a partir de uma ação “actionListener” teríamos que utilizar o método sendRedirect do HttpServletResponse; basta utilizar um método do tipo “action” para que essa navegação fosse realizada de modo simples e prático.

É aconselhável sempre usar as ações do tipo “action” em nos códigos JSF, caso a origem da ação não seja o código de um componente JSF ou uma chamada Ajax.

Response to JSF Mini Livro – Dicas, conceitos e boas práticas

1 4 5 6
    • uaihebert Post author

      João, boa tarde.

      Eu não tenho o material em PDF, dá muito trabalho já criar o post e seria tempo d+ em criar o PDF.

      Obrigado pela visita.

1 4 5 6

Leave a Reply

Your email address will not be published. Required fields are marked *


*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Current day month ye@r *