desenvolvimento web com javaserver faces - aula 03
DESCRIPTION
Trceira aula do curso Desenvolvimento WEB com JavaServer Faces, ministrado para integrantes da equipe de Desenvolvimento e Manutenção de Sistemas do Núcleo de Tcnologia da Informação - UFPE.Tópicos abordados: -Ciclo de vida -Manipulação de EventosTRANSCRIPT
Desenvolvimento WEB comJavaServer™ Faces
Renato V. MendesTéc. De Tecnologia da Informação – NTI/UFPE
Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 96
Aula 03 - Agenda
● Ciclo de Vida do JSF
● Manipulação de Eventos
[8]
Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 97
Ciclo de Vida do JSF
[16]
Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 98
Ciclo de Vida do JSF
● Ao executar uma requisição (request) a uma página JSF, essa requisição passa por várias fases de processamento até que seja retornada (response) para o cliente.
● Esse conjunto de fases é conhecido como JavaServer Faces Request Processing Lifecycle ou simplesmente Ciclo de Vida do JSF
● O seu conhecimento torna o desenvolvimento de aplicações JSF mais fácil e mais produtivo, pois é a base do funcionamento do framework
● É composto pelas seguintes fase:
– Restore View, Apply Request Values, Process Validations, Update Model Values, Invoke Application, Render Response
[2][8]
Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 99
Ciclo de Vida do JSF
● Restore View
– Nessa fase é restaurada ou criada a árvore de componentes em memória no servidor, para representar a informação da interface de usuário (UI) no cliente (Browser).
[8]
Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 100
Ciclo de Vida do JSF
[8]JavaSrver Faces 2.0, The Complete Reference – Chapter 3 – The JavaServer Faces Request Processing Lifecycle
Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 101
Ciclo de Vida do JSF
● Apply Request Values
– Nesse momento são atualizados os componentes no lado do servidor com dados atuais do cliente.
[8]
Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 102
Ciclo de Vida do JSF
[8]JavaSrver Faces 2.0, The Complete Reference – Chapter 3 – The JavaServer Faces Request Processing Lifecycle
Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 103
Ciclo de Vida do JSF
● Process Validations
– É executado a validação e a conversão dos tipos de dados dos novos dados dos componentes
[8]
Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 104
Ciclo de Vida do JSF
[8]JavaSrver Faces 2.0, The Complete Reference – Chapter 3 – The JavaServer Faces Request Processing Lifecycle
Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 105
Ciclo de Vida do JSF
● Update Model Values
– Os dados de todos os objetos no modelo de dados são atualizados com os novos valores.
– Ou seja, os valores dos Managed Beans são atualizados com os dados das propriedades dos componentes da requisição
[8]
Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 106
Ciclo de Vida do JSF
[8]JavaSrver Faces 2.0, The Complete Reference – Chapter 3 – The JavaServer Faces Request Processing Lifecycle
Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 107
Ciclo de Vida do JSF
● Invoke Application
– Executa toda lógica de aplicação necessária para atender a requisição e navegar para a próxima página, caso seja necessário.
– Ou seja, são executados os métodos no Managed Beans
[8]
Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 108
Ciclo de Vida do JSF
[8]JavaSrver Faces 2.0, The Complete Reference – Chapter 3 – The JavaServer Faces Request Processing Lifecycle
Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 109
Ciclo de Vida do JSF
● Render Response
– Salva o estado e renderiza a resposta para a requisição do cliente.
[8]
Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 110
Ciclo de Vida do JSF
[8]JavaSrver Faces 2.0, The Complete Reference – Chapter 3 – The JavaServer Faces Request Processing Lifecycle
Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 111
Ciclo de Vida do JSF
[8]
● Ciclo de Vida da primeira requisição
– Ocorre quando você vai diretamente para uma página, por exemplo, pela URL ou através de um link.
– Passa apenas por duas fases:● Restore View e Render Reponse
● Ciclo de Vida de um Postback
– Ocorre quando é feita uma requisição para a mesma página após uma ação (Ex.: após o clique de um botão).
– Segue o percurso completo do ciclo de vida
Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 112
Ciclo de Vida do JSF
[16]
Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 113
Ciclo de Vida do JSF - PhaseListenr
● Um PhaseListener oferece a capacidade de inserir código em qualquer ponto do ciclo de vida do JSF
● Um PhaseListener precisa implementar a interface PhaseListener, que possui os métodos:
– void afterPhase(PhaseEvent event);
– void beforePhase(PhaseEvent event);
– PhaseId getPhaseId();
Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 114
AuthPhaseListenr
Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 115
AuthPhaseListenr
● Para que o nosso PhaseListener seja executado, precisamos adicionar ele no faces-config.xml
Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 116
AuthPhaseListenr
● Ao acessar a página cadastrar.xhtml, notamos que apenas as fases RESTORE_VIEW e RENDER_RESPONSE são executadas.
Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 117
AuthPhaseListenr
● Ao preenchermos os campos e realizarmos o submit, percebemos que a requisição passa por todas as fases do ciclo de vida.
Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 118
AuthPhaseListenr
● Vamos alterar o método cadastrar() na classe UsuarioMBean, de formar que mostre uma mensagem no console.
Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 119
AuthPhaseListenr
● O método é executado na fase INVOKE_APPLICATION.
Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 120
Ciclo de Vida do JSF
● Link recomendado– http://balusc.blogspot.com.br/2006/09/debug-jsf-lifecycle.html
Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 121
Manipulação de Eventos
● O JSF trabalha com eventos semelhante ao desenvolvimento desktop
● Possui mecanismos para tratar diferentes tipos de eventos
– Application events
● Action Events e Value Change Events
– Lifecyles events
● PhaseEvent, PostRestoreStateEvent, PostAddToViewEvent, AjaxBehaviorEvent, PostValidateEvent, PreValidateEvent, PreRenderComponentEvent, PreRenderViewEvent, PostConstructApplicationEvent, PreDestroyApplicationEvent, ExeceptionQueuedEvent, ExeceptionQueuedEvent, PreDestroyCustomScopeEvent, PostConstructViewMapEvent, PreDestroyViewMapEvent, PreRemoveFromViewEvent [2][8]
Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 122
Manipulação de Eventos
● Application Events
– Mais importante categoria de eventos JSF
– Modo mais prático de reagir a manipulação de componentes pelo usuário
[2][8]
Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 123
Eventos de Ação
● São eventos iniciados por componentes do tipo UICommand
– h:commandButton e h:commandLink
● São executados na fase Invoke Application do ciclo de vida.
● Caso a propriedade immediate for setada para true o evento será executado antes, na fase Apply Request
Values
● Eventos desse tipo podem ser actions ou actionListeners
[2][8]
Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 124
Eventos de Ação – Actions
● Contribuem para a navegação de páginas (Visto anteriormente)
● Não possui informações sobre o evento
● Precisa de um método no Managed Bean que não receba parâmetros e retorne uma String.
● Vinculado através do atributo action
<h:commandButton action="#{usuarioBean.cadastrar}" value="Cadastrar">
public String cadastrar(){
String outcome = "";
… //Implementação do método
return outcome;
} [2][8]
Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 125
Eventos de Ação – Action Listeners
● Não Contribuem para a navegação de páginas
● Possui informações sobre o evento
● Precisa de um método no Managed Bean com retorno vazio (void) e que recebe como parâmetro um obejeto do tipo javax.faces.event.ActionEvent.
● Vinculado através do atributo actionListener
<h:commandButton actionListener="#{usuarioBean.verificarDisponibilidadeNomeUsuario}" value="Verificar Disponibilidade">
public void verificarDispoibilidadeNomeUsuario(ActionEvent e){
//Implementação do método
} [2][8]
Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 126
Eventos de Ação – Action Listeners
● Vamos incrementar nosso cadastro para verificar a disponibilidade de um nome de usuário utilizando um actionListener
[2][8]
Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 127
Eventos de Ação – Action Listeners
● Criar o método verficarDisponibilidadeLogin
[2][8]
Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 128
Eventos de Ação – Action Listeners
● Adicionar botão Verificar Disponiblidade no cadastrar.xhtml
[2][8]
Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 129
Eventos de Mudança de Valor
● Executados quando valores de componentes de entrada são alterados e o formulário é submetido.
● Vinculado através do atributo valueChangeListener.
● Possui informações sobre o evento
● Precisa de um método com retorno vazio (void) que receba como parâmetro um objeto do tipo javax.faces.event.ValueChangeEvent
● São executados na fase Process Validations do ciclo de vida
● Caso a propriedade immediate for setada para true o evento será executado antes, na fase Apply Request
Values[2][8]
Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 130
Manipulando Eventos
● Além de utilizar métodos como Action Listeners e Value Change Listeners, é possível criar Action Listeners e Value Change Listeners customizados
● São classes que implementam javax.faces.event.ActionListener e javax.faces.event.ValueChangeListener
● São usados na view com <f:actionlistener type="package.CustomActionListener" /> e <f:valueChangeListener type="package.CustomValueChangeListener "/>, respectitivamente.
[2][8]
Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 131
Autenticação com PhaseListener
● Vamos incrementar nosso projeto, de formar que o usuário precise ser autenticado para acessar o sistema
● http://rodrigolazoti.com.br/2008/09/01/filtrando-usuarios-logados-em-jsf-com-phaselistener/
[2][8]
Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 132
Autenticação com PhaseListener● Atualizando o AuthPhaseListener
[2][8]
Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 133
Autenticação com PhaseListener
● Adicionar entreda no faces-config.xml
● Mudar o welcome-file no web.xml
[2][8]
Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 134
Autenticação com PhaseListener
● Arquivo home.xhtml
[2][8]
Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 135
Autenticação com PhaseListener● Implementar LoginMBean.java
[2][8]
Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 136
Autenticação com PhaseListener
[2][8]
Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 137
Autenticação com PhaseListener● Tela de login (login.xhtml)
[2][8]
Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 138
Referências
● [2] Apostila Algaworks – DWJSF (Desenvolvimento Web com JavaServer Faces) - http://www.algaworks.com/downloads/apostilas/algaworks-dwjsf-desenvolvimento-web-com-javaserver-faces-2a-edicao.pdf
● [8] JavaServer Faces 2.0: The Complete Reference. Ed Burns. Chris Schalk com Neil Griffin
● [16] http://monteirobrena.files.wordpress.com/2010/01/ciclo_vida_jsf.png
Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 139
Renato V. [email protected]
http://blog.vmendes.com.br
Desenvolvimento WEB comJavaServer™ Faces