JavaServer Faces Parte 2
Recapitulando Aplicações web são aplicações que executam em um servidor Recebem requisições de usuários Retornam respostas ao usuário Browsers só entendem e exibem html O servidor deve gerar a resposta em html Com Java, podemos usar JSF - JavaServer Faces
Recapitulando - JavaServer Faces Framework Java para desenvolvimento web Um conjunto de componentes para construção de interface com o usuário PrimeFaces - uma biblioteca de componentes para JavaServer Faces
Recapitulando - xhtml Tags (componentes) Componentes são criados por meio de tags
Recapitulando - xhtml EL (Expression Language) Vinculam componentes a atributos de um objeto do modelo
Recapitulando - PrimeFaces Componentes do PrimeFaces http://www.primefaces.org/showcase/
Arquitetura Básica de uma Aplicação modelo xhtml controlador banco
Recapitulando - modelo Uma classe de modelo é a classe que contém os dados do objeto Contém anotações adicionais para vincular os objetos da classe às tabelas do banco de dados e os campos do objeto às colunas das tabelas
Recapitulando - controlador Uma classe controladora é uma classe que processa as requisições do usuário Geralmente, para cada xhtml existe uma classe controladora Evite classes Jesus no controle
Recapitulando - dao Uma classe dao é a classe responsável pelas operações de persistência de objetos inserção alteração exclusão recuperação
Criando uma tela de login Agora que temos nossa classe modelo de acesso ao banco de dados Vamos criar uma tela de login e integrar tudo Precisamos de um arquivo xhtml para gerar a tela e um controlador para processar as ações do usuário...
Criando uma tela de login (index.xhtml) modelo xhtml controlador banco
A página index.xhtml A página de login será nossa página inicial (index) e conterá: um campo para a identificação do usuário (inputtext) um campo para senha (password) um botão para submeter (commandbutton) um campo para possíveis mensagens de erro (messages) Tudo isto dentro de um form
A página index.xhtml
Criando o controlador (IndexController.java) modelo xhtml controlador banco
Criando o controlador (IndexController.java) O controlador conterá: Um atributo Administrador, cujos campos serão vinculados por EL Um método autenticar( ) que processará o click no botão Anotações específicas
Criando o controlador (IndexController.java)
Criando o controlador (IndexController.java)
Autenticando (AdministradorFacade.java)
Continuando a Aplicação Nossa aplicação Tem Administrador que gerencia alunos e atividades complementares Tem Atividade Tem Aluno, que apresenta comprovantes de atividades Tem Comprovante, apresentado pelo aluno, que se refere a uma Atividade
Relacionamentos Relacionamentos existem quando um objeto de uma classe está ligado a um objeto de outra classe 1 n n 1 aluno comprovante atividade
Mapeamento Mapeamento é a indicação da tabela correspondente à classe da coluna na tabela relacionada ao campo da classe
Mapeamento de Relacionamentos Da mesma forma que mapeamos campos do objeto e colunas na tabela do banco de dados, precisamos mapear relacionamentos Relacionamentos podem ser de um para um de um para muitos de muitos para muitos
Relacionamento de um-para-um Este tipo de relacionamento ocorre quando um objeto de uma classe está relacionado a apenas um objeto de outra classe Exemplo campus diretor
Relacionamento de um-para-muitos Este tipo de relacionamento ocorre quando um objeto de uma classe está relacionado a muitos objetos de outra classe Exemplo: um aluno apresenta vários comprovantes
Relacionamento de um-para-muitos Mapeamos este tipo de relacionamento por meio da anotação @OneToMany Na classe Aluno:
Relacionamento de um-para-muitos Na classe Comprovante: Este mapeamento é bidirecional
Relacionamento de um-para-muitos Podemos ter mapeamentos unidirecionais Exemplo para o comprovante interessa saber a qual atividade ele se refere mas não interessa saber quais os comprovantes daquela atividade
Relacionamento de um-para-muitos Neste caso, mapeamos só o que interessa
Para entender tudo isso... Programe!
Controlando Autenticação de Usuário Em muitos casos, precisamos controlar se o usuário está logado para permitir o acesso Faremos isso controlando a mudança de fases do JavaServer Faces O ciclo de vida da aplicação consiste em 6 fases Durante a mudança de fase, verificamos se o usuário está logado ou não
Controlando Autenticação de Usuário As fases em JSF para processar um form são: Restaurar a view (criar a tela) Aplicar valores de requisição (associar valores aos componentes) Processar as validações (aplicar regras) Atualizar o modelo (sets) Invocar a aplicação (submeter o form) Renderizar a resposta
Controlando Autenticação de Usuário
Registrando um Filtro Crie o arquivo faces-config.xml, na pasta web:
Registrando um Filtro No arquivo faces-config.xml, crie uma entrada:
Criando um Filtro Crie um arquivo Java com o nome dado ao filtro Implemente a interface PhaseListener Implemente o método afterphase( ) (ver exemplo) Se estiver na página index, permaneça Se não estiver na index: Se o usuário não estiver logado, vá para index Se o usuário estiver logado, vá para a página solicitada
Armazenando um atributo na sessão A navegação web utiliza o protocolo HTTP HTTPé um protocolo stateless: ele não mantém os dados após uma requisição Uma sessão é o tempo de visita de um usuário A sessão armazena algumas informações no servidor
Armazenando um atributo na sessão Na nossa aplicação Quando o usuário logar corretamente, armazenamos o usuário na sessão Quando o usuário tentar acessar uma página, verificamos se há usuário válido na sessão, utilizando o filtro Quando o usuário sair, cancelamos o atributo da sessão
Armazenando um atributo na sessão No controlador do index:
Cancelando um atributo na sessão Quando o usuário sair: