quarta-feira, 16 de fevereiro de 2011

JSF – actionListener, outra possibilidade…


ActionListener é uma outra funcionalidade (propriedade) da taglib commandButton, utilizado nas páginas JSPs.
Apenas para recapitular, um commandButon (taglig do JSF) simula um botão Submit do HTML, porém com inúmeras possibilidades, como por exemplo o action.
Existe também uma outra propriedade, que serve basicamente para chamar métodos, ela se chama ActionListener, e é invocada sempre antes da propriedade Action.
Mas qual a utilidade dela se já podemos utilizar o action?
Inúmeras são as possibilidades para o uso das duas propriedades em conjunto, action actionListener, por exemplo, podemos definir um padrão para nosso projeto onde em todas as propriedades action só informamos as strings de navegação, e as chamadas de métodos devem ser feitas unicamente pelo actionListener, tudo é válido quando não queremos ter trabalho em futuras manutenções. Outro uso para estas tags em conjunto seria chamadas diferentes para camadas diferentes (MVC), a propriedade actionListener se encarrega de chamar os métodos responsáveis pelo controle de negócios, e a propriedade action se encarrega da camada de visualização, enfim, é útilsó depende do projeto.
Como utilizar?
Existem três passos básicos, e tudo começa no JSP, com a propriedade do commandButton.
Primeiro:
<h:commandButton
action=”string_mapeada_no_faces_config_xml”
actionListener=”#{meuBean.metodoActionListener}” 
value=”Texto_do_botao” />
Na tag commandButton estamos informando que a ação (action) será uma string que foi mapeada no faces-config.xml(a página jsp que será exibida quando este botão for acionado), também pode-se chamar um método cujo retorno seja alguma string mapeada no faces-config.
Na tag actionListener estamos invocando o metodo metodoActionListener do nosso bean.
É importante informar (novamente) que a propriedade actionListener é executada antes da propriedade action, ou seja, primeiro o servidor irá executar o método que está definido na propriedade actionListener, depois que este método acabar o servidor vai prosseguir para a página ou método informado na propriedade action.
Segundo:
O método tem que ser void!
Bem, não precisa ser exatamente void, se você fizer este método com algum retorno não vai dar erro, porém o retorno não vai ser utilizado pra nada, então vamos evitar código e processamento desnecessário.
Terceiro:
O método DEVE receber como parâmetro um ActionEvent, do pacote javax.faces.event.
Este parâmetro é passado automaticamente pelo servlet durante a execução, e deve ser informado para que a comunicação entre a página e o bean ocorra através do actionListener.
Então nosso método ficaria assim:
import import javax.faces.event.ActionEvent;
public void metodoActionListener(ActionEvent e){
//alguma coisa é feita aqui.
}
Agora divirta-se!

Nenhum comentário:

Postar um comentário