45
Desenvolvimento WEB com JavaServer™ Faces Renato V. Mendes Téc. De Tecnologia da Informação – NTI/UFPE

Desenvolvimento WEB com JavaServer Faces - Aula 03

Embed Size (px)

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 Eventos

Citation preview

Page 1: Desenvolvimento WEB com JavaServer Faces - Aula 03

Desenvolvimento WEB comJavaServer™ Faces

Renato V. MendesTéc. De Tecnologia da Informação – NTI/UFPE

Page 2: Desenvolvimento WEB com JavaServer Faces - Aula 03

Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 96

Aula 03 - Agenda

● Ciclo de Vida do JSF

● Manipulação de Eventos

[8]

Page 3: Desenvolvimento WEB com JavaServer Faces - Aula 03

Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 97

Ciclo de Vida do JSF

[16]

Page 4: Desenvolvimento WEB com JavaServer Faces - Aula 03

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]

Page 5: Desenvolvimento WEB com JavaServer Faces - Aula 03

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]

Page 6: Desenvolvimento WEB com JavaServer Faces - Aula 03

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

Page 7: Desenvolvimento WEB com JavaServer Faces - Aula 03

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]

Page 8: Desenvolvimento WEB com JavaServer Faces - Aula 03

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

Page 9: Desenvolvimento WEB com JavaServer Faces - Aula 03

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]

Page 10: Desenvolvimento WEB com JavaServer Faces - Aula 03

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

Page 11: Desenvolvimento WEB com JavaServer Faces - Aula 03

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]

Page 12: Desenvolvimento WEB com JavaServer Faces - Aula 03

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

Page 13: Desenvolvimento WEB com JavaServer Faces - Aula 03

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]

Page 14: Desenvolvimento WEB com JavaServer Faces - Aula 03

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

Page 15: Desenvolvimento WEB com JavaServer Faces - Aula 03

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]

Page 16: Desenvolvimento WEB com JavaServer Faces - Aula 03

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

Page 17: Desenvolvimento WEB com JavaServer Faces - Aula 03

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

Page 18: Desenvolvimento WEB com JavaServer Faces - Aula 03

Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 112

Ciclo de Vida do JSF

[16]

Page 19: Desenvolvimento WEB com JavaServer Faces - Aula 03

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();

Page 20: Desenvolvimento WEB com JavaServer Faces - Aula 03

Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 114

AuthPhaseListenr

Page 21: Desenvolvimento WEB com JavaServer Faces - Aula 03

Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 115

AuthPhaseListenr

● Para que o nosso PhaseListener seja executado, precisamos adicionar ele no faces-config.xml

Page 22: Desenvolvimento WEB com JavaServer Faces - Aula 03

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.

Page 23: Desenvolvimento WEB com JavaServer Faces - Aula 03

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.

Page 24: Desenvolvimento WEB com JavaServer Faces - Aula 03

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.

Page 25: Desenvolvimento WEB com JavaServer Faces - Aula 03

Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 119

AuthPhaseListenr

● O método é executado na fase INVOKE_APPLICATION.

Page 26: Desenvolvimento WEB com JavaServer Faces - Aula 03

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

Page 27: Desenvolvimento WEB com JavaServer Faces - Aula 03

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]

Page 28: Desenvolvimento WEB com JavaServer Faces - Aula 03

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]

Page 29: Desenvolvimento WEB com JavaServer Faces - Aula 03

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]

Page 30: Desenvolvimento WEB com JavaServer Faces - Aula 03

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]

Page 31: Desenvolvimento WEB com JavaServer Faces - Aula 03

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]

Page 32: Desenvolvimento WEB com JavaServer Faces - Aula 03

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]

Page 33: Desenvolvimento WEB com JavaServer Faces - Aula 03

Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 127

Eventos de Ação – Action Listeners

● Criar o método verficarDisponibilidadeLogin

[2][8]

Page 34: Desenvolvimento WEB com JavaServer Faces - Aula 03

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]

Page 35: Desenvolvimento WEB com JavaServer Faces - Aula 03

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]

Page 36: Desenvolvimento WEB com JavaServer Faces - Aula 03

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]

Page 37: Desenvolvimento WEB com JavaServer Faces - Aula 03

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]

Page 38: Desenvolvimento WEB com JavaServer Faces - Aula 03

Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 132

Autenticação com PhaseListener● Atualizando o AuthPhaseListener

[2][8]

Page 39: Desenvolvimento WEB com JavaServer Faces - Aula 03

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]

Page 40: Desenvolvimento WEB com JavaServer Faces - Aula 03

Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 134

Autenticação com PhaseListener

● Arquivo home.xhtml

[2][8]

Page 41: Desenvolvimento WEB com JavaServer Faces - Aula 03

Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 135

Autenticação com PhaseListener● Implementar LoginMBean.java

[2][8]

Page 42: Desenvolvimento WEB com JavaServer Faces - Aula 03

Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 136

Autenticação com PhaseListener

[2][8]

Page 43: Desenvolvimento WEB com JavaServer Faces - Aula 03

Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 137

Autenticação com PhaseListener● Tela de login (login.xhtml)

[2][8]

Page 44: Desenvolvimento WEB com JavaServer Faces - Aula 03

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

Page 45: Desenvolvimento WEB com JavaServer Faces - Aula 03

Oct 22, 2012 Desenvolvimento WEB com JavaServer™ Faces 139

Renato V. [email protected]

http://blog.vmendes.com.br

Desenvolvimento WEB comJavaServer™ Faces