(UFF) JSF (I) TEPIS II

Documentos relacionados
Java para Desenvolvimento Web

Engenharia de Aplicações Sistemas Interactivos 2009/10! JAVASERVER FACES 1.2. Mestrado em Informática Universidade do Minho! 31!

Componentes Web do JEE

Aula 5: J2EE Application Assembly Model

Java Server Faces Navegação de

EXERCÍCIOS DE REVISÃO DE CONTEÚDO QUESTÕES DISSERTATIVAS

A composição de uma Java Server Pages (Diretivas, Elementos de Script e Objetos Implícitos)

5 Arquitetura de implementação

JAVA PARA WEB E EJB APLICAÇÕES WEB, SERVIDORES DE APLICAÇÃO, CONTAINERS WEB

Objetivos. Aprender o que são JavaBeans e como podem ser usados em páginas JSPs Usando ações-padrão ao invés de scripts

DESENVOLVENDO APLICAÇÕES WEB COM JSP E JSTL. Peter Jandl Junior. Novatec

Regras de Navegação e Templates

Java Server Pages (Diretivas, Elementos de Script e Objetos Implícitos)

2 Versão 1: Funcionalidade Básica e Interface Web

Enterprise Java Beans (I)

DESENVOLVIMENTO DE SISTEMAS WEB UNIDADE I Criação de Aplicativos Web. Luiz Leão

Managed Beans e Tags JSF

JavaServer Pages (JSP) Leonardo Gresta Paulino Murta

Continuação... Criando a Interface e adiante

Desenvolvimento Web TCC Turma A-1

Introdução ao Desenvolvimento de

DESENVOLVIMENTO DE SISTEMAS WEB. Lista de Exercícios AV1-01. Luiz Leão

Java para WEB com Struts 2 e Hibernate

Aula 7: Servlets (II)

Introdução ao JSF. Daniel Bruno II Semana de Tecnologia da Informação UNIVEM

J550 JSP com tags padrão

JSP Standard Tag Library (JSTL)

ALUNO: RONI FABIO BANASZEWSKI

Surgindo em 1997 a API Java Servlet proporciona ao desenvolvedor a possibilidade de adicionar conteúdo dinâmico em um servidor web usando a

JavaScript Fundamental e Servlet Fundamental

CONTEÚDO PROGRAMÁTICO

INE 5612 Professor: Frank Siqueira. Leonardo Silva Jean Ercilio Thiago

Sistema Operacional Unidade 11.2 Shell Script: estruturas condicionais. QI ESCOLAS E FACULDADES Curso Técnico em Informática

Linguagem de Programação II Implementação

Classes e Objetos INTRODUÇÃO À ORIENTAÇÃO A OBJETOS COM JAVA - MÓDULO II. Classes. Objetos. Um modelo para a criação de objetos

Web Services REST JAX-RS

Session Bean Stateful

Classes e Objetos. Sintaxe de classe em Java

Desenvolvimento Web com Java. Sérgio Lopes Caelum -

1) DADOS DA OBRA: Programando em Java 2 Teoria e Aplicações Rui Rossi dos Santos 2004 Axcel Books (

Frameworks funcionais para JSF que proporciona o desenvolvimento de aplicações computacionais WEB

Continuação... Criando a Interface e adiante

Formação JAVA Web.

Esta categoria mais geral, à qual cada objeto pertence, denominamos de classe; IFSC/POO + JAVA - prof. Herval Daminelli

Java II. Sérgio Luiz Ruivace Cerqueira

Java para Web & EJB. Teoria, prática e questões Módulo Introdução e Servlets

O que é uma tag Tag tag tag tag tag tags tags HTML O que é uma tag library biblioteca de tags tags Java Standard Tag Library JSTL Tag Library JSTL

Java para Desenvolvimento Web Carga Horária: 40 Horas.

J820. Testes em J2EE com. Jakarta C A C T U S. argonavis.com.br. Helder da Rocha

Unidade 6: Java Server Pages Prof. Daniel Caetano

Tutorial 1 Configuração Apache Tomcat no NetBeans 8.0 (passo a passo)

JSP Standard Tag Library (JSTL)

FAURGS HCPA Edital 06/2010 PS 51 ANALISTA DE SISTEMA I Fábrica de Aplicativos Pág. 1

Desenvolvimento Web II

Treinamento. Professor: Maurício Giacomini Penteado 1/42

Dados armazenados em um objeto podem ser tanto primitivos, tais como inteiros ou caracteres, ou referências para outros objetos.

Introdução a JavaServer Pages. Curso de Tecnologia em Análise e Desenvolvimento de Sistemas Desenvolvimento de sistemas web

Configurando uma aplicação Struts

Desenvolvimento Web III. Prof. Felippe Scheidt

Desenvolvimento Web II

Singleton e Adapter. Professor: Nazareno Andrade (baseado no material de Hyggo Almeida e Jacques Sauvé)

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

PROGRAMAÇÃO EM AMBIENTE WEB I

Orientação a objetos. Programação. Orientada a Objetos. Orientação a objetos. Orientação a objetos. Abstração e encapsulamento

INF1337 LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS

Figura 16 Niagara - Visão de grupos de notas.

SISTEMA DE INFORMAÇÃO GEOGRÁFICA APLICADA À GESTÃO PÚBLICA

Encapsulamento e Métodos (Construtores e Estáticos) João Paulo Q. dos Santos

Projeto Físico. Guia Rápido Do Desenvolvedor

Tabelas. Banco de Dados I MySQL

JSP (JAVASERVER PAGES)

Arquitetura em Camadas

BANCO DE DADOS PARA WEB

REST RESTfulWeb Services JAX-RS

Desenvolvimento de aplicações Web. Java Server Pages

Introdução. descrever os tipos de interfaces e linguagens oferecidas por um SGBD. mostrar o ambiente de programas dos SGBD s

Oracle Objeto-Relacional. Pablo Vieira Florentino

JSP Standard Tag Library (JSTL)

Construtores e Especificadores de Acesso

Palavras Reservadas da Linguagem Java

Capítulo 2. Camada de aplicação

Exercício Programa Mini Web Server

PLATAFORMA SIGA RIO DAS VELHAS MANUAL DO CÓDIGO FONTE

2 Criar uma Enterprise Application que num módulo EJB irá conter um ou vários Beans.

Instituto de Informática Estrutura de Dados II

14/08/2009. Módulo 4

Módulo II Arquitetura em Camadas

Paradigmas de Programação. Java First-Tier: Aplicações. Orientação a Objetos em Java (I) Nomenclatura. Paradigma OO. Nomenclatura

2ª Edição Décio Heinzelmann Luckow Alexandre Altair de Melo

Figura 1: Eclipse criação de um Dynamic Web Project

Manual Demoiselle Wizard CETEC/CTCTA

Redes de Computadores

USANDO O JSF. Programação para Internet

TUTORIAL INTEGRAÇÃO SPRING, HIBERNATE E MYSQL

UFG - Instituto de Informática

Transcrição:

Aula 11: JSF (I) Diego Passos Universidade Federal Fluminense Técnicas de Projeto e Implementação de Sistemas II Diego Passos (UFF) JSF (I) TEPIS II 1 / 34

Java Server Faces API que provê um framework padronizado para camada de apresentação. Aplicações Web. Se diferencia dos Servlets: Servlets provêm acesso de baixo nível a requisições. JSF provê conjunto de componentes de interface. JSF também provê modelo de eventos ligando a interface ao resto do código da aplicação. Utiliza tags JSP para criar as interfaces com o usuário. Biblioteca de tags específicas para JSF. Diego Passos (UFF) JSF (I) TEPIS II 2 / 34

Java Server Faces (II) Especificação incluída no J2EE 1.4. Objetivo da especificação do JSF era padronizar desenvolvimento de interfaces web. Também objetivava ser tool-friendly. Permitir que IDEs suportassem construção de interfaces no estilo drag-and-drop. Desenvolvedor escolhe componentes de um menu e arrasta até a interface. Idealmente, também permitiria o desenvolvimento e fornecimento de componentes por terceiros. De fato, estes objetivos foram atingidos parcialmente. Diego Passos (UFF) JSF (I) TEPIS II 3 / 34

Java Server Faces (III) Neste curso: Foco em como a API funciona. E não nas ferramentas e IDEs. Veremos como desenvolver JSFs diretamente no código. Abordaremos o básico do JSF. Diego Passos (UFF) JSF (I) TEPIS II 4 / 34

Aplicação de Exemplo Aulas serão baseadas no capítulo 5 do livro Java Enterprise in a Nutshell. O capítulo ilustra os conceitos com base em uma aplicação de exemplo. Aplicação consiste em sistema gerenciador de biblioteca. Funcionalidades: Login com privilégios diferentes (Clientes, Bibliotecário). Adicionar livros (Bibliotecário). Ver livros (Clientes, Bibliotecário). Pegar livro emprestado (Clientes, Bibliotecário). Devolver livro (Bibliotecário). Revisar livros. Diego Passos (UFF) JSF (I) TEPIS II 5 / 34

Estrutura de uma Aplicação JSF JSF é baseado em JSP (que é baseado em Servlets). Logo, estrutura de empacotamento é similar. Dependências colocadas em WEB-INF/lib. Classes auxiliares colocadas em WEB-INF/classes. Descritor da aplicação em WEB-INF/web.xml.... Diego Passos (UFF) JSF (I) TEPIS II 6 / 34

O Servlet FacesServlet Implementação padrão de um Servlet usado em aplicações JSF. Responsável por processar requisições a páginas JSF e retornar a interface HTML para o usuário. Deve ser configurado no web.xml <servlet> <servlet-name>faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.facesservlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>faces Servlet</servlet-name> <url-pattern>*.faces</url-pattern> </servlet-mapping> Diego Passos (UFF) JSF (I) TEPIS II 7 / 34

O Servlet FacesServlet (II) O que ocorre quando uma requisção chega ao FacesServlet? O servlet cria uma árvore contendo um conjunto de componentes. Cada componente corresponde a um elemento da interface da página. O servlet também garante que estes componentes sejam populados com os valores corretos, se for o caso. A árvore de componentes é usada para criar a resposta ao usuário. Diego Passos (UFF) JSF (I) TEPIS II 8 / 34

O Servlet FacesServlet (III) Mais especificamente, o FacesServlet segue os seguintes passos: 1 Restauração da interface (ou view). 2 Aplicação dos valores da requisição. 3 Processamento de validações. 4 Atualização dos valores do modelo. 5 Invocação da aplicação. 6 Renderização da resposta. Diego Passos (UFF) JSF (I) TEPIS II 9 / 34

Passo 1: Restauração da Interface O servlet analisa a requisição e encontra a interface correspondente. Em geral, as interfaces são arquivos.jsp. Por padrão, a correspondência é feita por nome: O nome base da requisição é usado para indexar um arquivo JSP. Exemplo: requisição a /view/books.faces é mapeada para /view/books.jsp. Com base no conteúdo da interface, é criada uma árvore de componentes. Diego Passos (UFF) JSF (I) TEPIS II 10 / 34

Passo 2: Aplicação dos Valores da Requisição Se a requisição HTTP contém parâmetros, o Servlet tenta mapeá-los para componentes. Caso contrário, servlet ignora passos 3, 4 e 5. Passa direto ao passo 6. Diego Passos (UFF) JSF (I) TEPIS II 11 / 34

Passo 3: Processamento de Validações Depois de fazer o mapeamento dos valores dos parâmetros aos componentes, servlet processa validações. Ele itera pelos componentes, verificando se os mesmos possuem validadores de entrada. Caso possuam, estes validadores são chamados. Exemplos de validadores: Validador de data. Validador de CPF. Se algum validador detectar erros, a página é exibida com os dados originais. E possivelmente algum aviso ao usuário. Diego Passos (UFF) JSF (I) TEPIS II 12 / 34

Passo 4: Atualização dos Valores do Modelo Caso a validação das entradas tenha sido bem sucedida, há uma atualização do modelo. Cada componente da interface tem um Java Bean associado. Servlet chama os métodos correspondentes para dos beans para atualizar seus estados. Diego Passos (UFF) JSF (I) TEPIS II 13 / 34

Passo 5: Invocação da Aplicação Após a atualização do modelo, Servlet invoca ações de lógica de domínio. Estas ações agem sobre o novo estado do modelo. Interfaces diferentes podem estar associadas a partes diferentes da lógica de domínio. Em uma mesma interface, ações diferentes podem ser invocadas, dependendo da requisição do usuário. Diego Passos (UFF) JSF (I) TEPIS II 14 / 34

Passo 6: Renderização da Resposta Resposta (HTML resultante) é renderizada (construída e enviada) para o cliente. Dependendo do resultado do passo anterior, resposta pode contér a página originalmente requisitada ou alguma outra interface. Diego Passos (UFF) JSF (I) TEPIS II 15 / 34

O Arquivo faces-config.xml Arquivo de configuração específico do JSF. Localizado no diretório WEB-INF. Inclui definições como: Regras de navegação. Informação de localização. Beans gerenciados. Diego Passos (UFF) JSF (I) TEPIS II 16 / 34

O Arquivo faces-config.xml Exemplo (quase) mínimo: <faces-config> <application> <locale-config> <default-locale>en</default-locale> </locale-config> </application> <!-- Regras de Navegação --> <!-- Definições de Beans --> </faces-config> Diego Passos (UFF) JSF (I) TEPIS II 17 / 34

Beans Gerenciados Cola entre a interface do usuário e a lógica de negócio. Interface do usuário é geralmente representada por JSPs. Utilizando tags da biblioteca de tags da JSF. Lógica de negócio pode ser qualquer tipo de código em Java. Um bean gerenciado é um Java Bean normal, configurado no arquivo faces-config.xml. Construtor sem parâmetros. Métodos do tipo get/set para cada atributo. Diego Passos (UFF) JSF (I) TEPIS II 18 / 34

Beans Gerenciados (II) Além da estrutura normal de um Java Bean, beans gerenciados fornecem action methods. Estes métodos são invocados pelo framework JSP em resposta a eventos. Ações do usuário. Ou outros tipos de eventos no sistema. Estes métodos manipulam o modelo de dados da aplicação. Diego Passos (UFF) JSF (I) TEPIS II 19 / 34

Beans Gerenciados (III) JSF geralmente classifica as beans gerenciadas em duas categorias. Model beans. Backing beans. Diferença é apenas conceitual: Model beans são mais profundamente ligados ao modelo de dados. Backing beans estão mais próximos da interface. Em suma, backing beans fazem a conexão entre a interface e os model beans. Diego Passos (UFF) JSF (I) TEPIS II 20 / 34

Beans Gerenciados (IV) Um bean pode ser associado a quatro tipo de escopos: application: toda a aplicação compartilha uma única instância. session: uma instância é criada para cada sessão. request: uma instância é criada para cada requisição. Caso o bean seja necessário. scopeless: acessados por outros beans, mas não diretamente pela aplicação. São instanciados quando requisitados e podem ser destruídos em seguida. Importante: estes escopos não necessariamente correspondem aos escopos de Servlets e JSPs. Diego Passos (UFF) JSF (I) TEPIS II 21 / 34

Exemplo de Backing Bean: Manipulação de Sessão import model.user; import logic.usermanager; public class UserSession { private User currentuser = null; public UserSession() { currentuser = UserManager.getGuestUser(); } public User getcurrentuser() { return currentuser; } public void setcurrentuser(user currentuser) { this.currentuser = currentuser; } public boolean isloggedin() { if (currentuser == null) return false; if (currentuser == UserManager.getGuestUser()) { return false; return true; } } public String logout() { currentuser = UserManager.getGuestUser(); return "home"; } Diego Passos (UFF) JSF (I) TEPIS II 22 / 34

Beans Gerenciados: Arquivo faces-config.xml <managed-bean> <managed-bean-name>library</managed-bean-name> <managed-bean-class> com.oreilly.jent.jsf.library.model.library </managed-bean-class> <managed-bean-scope>application</managed-bean-scope> </managed-bean> <managed-bean> <managed-bean-name>usersession</managed-bean-name> <managed-bean-class> com.oreilly.jent.library.session.usersession </managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean> <managed-bean> <managed-bean-name>loginform</managed-bean-name> <managed-bean-class> com.oreilly.jent.jsf.library.model.loginform </managed-bean-class> <managed-bean-scope>request</managed-bean-scope> </managed-bean> Bean library representa a biblioteca. Instância única para toda a aplicação. Bean usersession representa a sessão de um usuário. Uma instância por sessão. Bean loginform corresponde ao formulário de login. Instância é criada sempre que um usuário tenta se logar. Diego Passos (UFF) JSF (I) TEPIS II 23 / 34

O Objeto FacesContext A API JSF disponibiliza uma classe chamada FacesContext. A classe representa o contexto de uma aplicação JSF. Conceito similar aos outros contextos discutidos em Servlets e JSPs. Esta classe possui um método estático chamado getcurrentinstance(). Retorna uma referência para o contexto do JSF atual. Qualquer classe executada durante o processamento de uma requisição a uma aplicação JSP pode chamá-lo. Diego Passos (UFF) JSF (I) TEPIS II 24 / 34

O Objeto FacesContext (II) A partir do objeto FacesContext é possível obter acesso direto aos beans da sessão atual. Exemplo: FacesContext context = FacesContext.getCurrentInstance(); Map map = context.getexternalcontext().getsessionmap(); UserSession usersession = (UserSession) map.get("usersession"); Diego Passos (UFF) JSF (I) TEPIS II 25 / 34

Inicialização Estática de Atributos de um Bean Usando o arquivo faces-config.xml podemos configurar estaticamente atributos de beans gerenciadas. Suponha, por exemplo, que nosso sistema tenha uma backing bean para exibição de informações de livros. Classe BookDisplayForm. Esta bean obtém as informações a partir da classe library. Que representa a biblioteca. Sempre que criarmos uma instância desta bean, precisamos passar a referência para a instância de library. Ao invés de escrevermos código para isso, podemos usar o arquivo de configuração. Diego Passos (UFF) JSF (I) TEPIS II 26 / 34

Inicialização Estática de Atributos de um Bean (II) Como BookDisplayForm é um Java Bean, ele possui um método do tipo set para library: public void setlibrary(library library) { this.library = library; } Diego Passos (UFF) JSF (I) TEPIS II 27 / 34

Inicialização Estática de Atributos de um Bean (III) No arquivo faces-config.xml: <managed-bean> <managed-bean-name>bookdisplayform</managed-bean-name> <managed-bean-class> com.oreilly.jent.jsf.library.backing.bookdisplayform </managed-bean-class> <managed-bean-scope>session</managed-bean-scope> <managed-property> <property-name>library</property-name> <value>#{library}</value> </managed-property> </managed-bean> A expressão #{library} é uma EL do JSF. Indica que queremos acessar uma bean chamada library. Do escopo externo mais próximo. Não é possível utilizar objetos de escopos mais internos. Diego Passos (UFF) JSF (I) TEPIS II 28 / 34

A Expression Language do JSF Similar, mas não idêntica, à EL usada no JSP. Permite fazer referência a beans gerenciados da aplicação. São utilizadas para dois propósitos no JSF: Recuperar valores a partir de beans. Dizer aos componentes JSF quais propriedades de um bean devem ser atualizadas. Diego Passos (UFF) JSF (I) TEPIS II 29 / 34

A Expression Language do JSF (II) Sintaxe geral de uma Expressão EL em JSF: #{identificadores e modificadores}. Exemplo: <h:outputtext value="#{usersession.currentuser.username}"/> Acessa o valor da propriedade username de currentuser. Por sua vez, uma propriedade da bean usersession. A tag <h:outputtext> é uma tag especial da biblioteca de tags JSF. Próxima aula. Diego Passos (UFF) JSF (I) TEPIS II 30 / 34

A Expression Language do JSF (III) Segundo exemplo: entrada de dados. Quando atribuída como um valor de um componente de entrada, uma EL é usada para pré-popular o componente. <h:inputtext value="#{loginform.username}"/> No primeiro acesso do usuário à página, o campo será apresentado vazio. Bean loginform tem escopo de requisição. Logo, acabou de ser instanciado. Quando o usuário submete o formulário, expressão EL indica que valor do campo deve ser armazenado na propriedade username do bean loginform. Diego Passos (UFF) JSF (I) TEPIS II 31 / 34

A Expression Language do JSF (III) Uma expressão EL também pode referenciar um mapeamento. Exemplo: #{sessionscope.usersession.currentuser.username}. Forma alternativa: #{sessionscope[ usersession ].currentuser.username}. Ambas as formas tem mesma semântica: Referenciam o valor (objeto) associado à chave usersession no mapeamento sessionscope. A segunda forma é usada quando a chave contém o caracter.. Diego Passos (UFF) JSF (I) TEPIS II 32 / 34

A Expression Language do JSF (IV) A linguagem disponibiliza alguns objetos pré-alocados. Objeto EL applicationscope cookie facescontext header headers initparam param paramvalues requestscope sessionscope view Definição Mapeamento contendo todos os beans gerenciados de escopo da aplicação. Mapeamento contendo todos os cookies da requisição atual. Instância do FacesContext associado à requisição atual. Mapeamento contendo todos os cabeçalhos da requisição atual. Mapeamento contendo todos os cabeçalhos da requisição atual (com múltiplos valores). Mapeamento contendo todos parâmetros de inicialização do FaceServlet. Mapeamento contendo todos os parâmetros da requisição HTTP atual. Mapeamento contendo todos os parâmetros da requisição HTTP atual (com múltiplos valores). Mapeamento contendo todos os beans gerenciados de escopo da requisição. Mapeamento contendo todos os beans gerenciados de escopo da sessão. Objeto que representa a árvore de componentes associada à requisição atual. Diego Passos (UFF) JSF (I) TEPIS II 33 / 34

A Expression Language do JSF (V) É possível realizar cálculos e comparações com EL. Tipo Operadores Disponíveis Aritméticos + - / % * div mod Lógicos &&! and or not Relacionais < > ==!= lt le gt ge eq ne Seleção? Exemplo: operador de seleção. <h:outputtext value="#{bookdisplayform.book.checkedout? Out : In }"/> Diego Passos (UFF) JSF (I) TEPIS II 34 / 34