Seminário JavaServer Faces

63
Seminário JavaServer Faces Paulo Venancio Lopes Daniel Sguillaro

description

Seminário JavaServer Faces. Paulo Venancio Lopes Daniel Sguillaro. Tópicos. Introdução Aplicação Web Tecnologia Java Servlet Custom Tags JavaServer Pages JavaServer Faces. Aplicação Web. Aplicação web é a extensão dinâmica da web ou - PowerPoint PPT Presentation

Transcript of Seminário JavaServer Faces

Page 1: Seminário JavaServer Faces

Seminário JavaServer Faces

Paulo Venancio Lopes Daniel Sguillaro

Page 2: Seminário JavaServer Faces

Tópicos

● Introdução● Aplicação Web● Tecnologia Java Servlet● Custom Tags● JavaServer Pages● JavaServer Faces

Page 3: Seminário JavaServer Faces

Aplicação Web

Aplicação web é a extensão dinâmica da web ou application server, e são divididas em dois tipos:● Presentation-oriented: Cria páginas interativas contendo HTML, XML, e outros, e conteúdos dinâmicos em resposta a uma requisição.● Service-oriented: Implementa a parte final de um web service. Aplicações presentation-oriented são frequentemente clientes de uma aplicação service-oriented web.

Page 4: Seminário JavaServer Faces

Aplicação web (continuação)

Interação entre um cliente e uma aplicação web:

Page 5: Seminário JavaServer Faces

Aplicação web (continuação)

● Servlets: são classes java que dinamicamente processam requisições e constroem respostas.

● Paginas JSP: são documentos textos que são executados como servlets e são apropriados para geração de markup language tais com HTML, SVG, WML, e XML.

Page 6: Seminário JavaServer Faces

Aplicação web (continuação)

Relação entre as tecnologias de aplicação java web

Page 7: Seminário JavaServer Faces

●Ciclo de vida da aplicação Web

● Desenvolvimento do código do componente web.● Desenvolvimento do descritor de implantação.● Compilar componentes da aplicação web e classe auxilares.● Opcionalmente empacotar a aplicação em uma unidade de implantação.● Implantar a aplicação em um web container.● Acessar a URL que referência a aplicação web.

Page 8: Seminário JavaServer Faces

Módulo Web

Page 9: Seminário JavaServer Faces

Empacotando Módulos Web

Um módulo web pode ser empacotado num arquivo

*.war que é simplesmente um arquivo *.jar renomeado,

para ser implantado em um web container. Mas pode se

implantar o módulo diretamente.

Page 10: Seminário JavaServer Faces

Implantando Módulo Web

Pode-se implantar o módulo de duas forma:1. Copiando o módulo web para o diretório de implantação do web container.

2. Copiando o pacote do módulo web (arquivo *.war) no diretório de implantação do web container.

Obs1: Pode-se ainda no caso do Tomcat configurar o descritor server.xml para que identifique o módulo web.Obs2: Um context root identifica a aplicação web num JEE server (ex: http://host:port/context_root/alias).

Page 11: Seminário JavaServer Faces

Tecnologia Java Servlet

Um servlet é uma classe java que extende as capacidades do servidor que acessam aplicações num modelo de programa requisição e resposta. Todos os servlets podem responder qualquer tipo de requisição, para cada aplicação a tecnologia java servlet define classes servlet especificas para HTTP.

Page 12: Seminário JavaServer Faces

Tecnologia Java Servlet (cont.)

Os pacotes javax.servlet e javax.sservlet.http

provem interfaces e classes para escrever

servlets. Todos servlets devem implementar a

interface Servlet, a qual define os métodos de

ciclo de vida

Page 13: Seminário JavaServer Faces

Ciclo de Vida do Servlet

O ciclo de vida de um servlet é controlado pelo container no qual o servlet tenha sido implantado.

Quando uma requisição é mapeada para o servlet, o container performa os seguintes passos.

1. Se uma instância do servlet não existe, o web container :

a. Carrega a classe do servlet.

Page 14: Seminário JavaServer Faces

Ciclo de Vida do Servlet (cont.)

b. Cria uma instância da classe do servlet.c. Inicializa a instância do servlet chamando o método init.

2. Invoca o método service, passando os objetos request e response .

Obs: Se o container necessitar remover o servlet , ele finaliza o servlet chamando o método destroy.

Page 15: Seminário JavaServer Faces

Custom Tags numa página JSP

É o elemento da linguagem JSP definida por um Usuário.

<%@ taglib uri="/tlt" prefix="tlt" %>

<html>   

<body bgcolor="white">

 <tlt:iterator var="departmentName" type="java.lang.String"       group="${myorg.departmentNames}">     

  </body>

</html>

Page 16: Seminário JavaServer Faces

Tecnologia JavaServer Pages

JavaServer Pages (JSP) permite fácil criação de conteúdos web sendo ambos componentes dinâmicos e estáticos.

Página JSP é um documento texto que contém dois tipos de textos: dados estáticos (HTML, SVG, WML, XML, e outros), e elementos JSP, para construir conteúdos dinâmicos (recomenda-se a extensão *.jsp).

Page 17: Seminário JavaServer Faces

Ciclo de vida da Pagina JSP

São determinadas pela tecnologia Java Servlet.Quando um request é mapeado para uma

página JSP, o web container primeiro checa se o servlet da pagina JSP é mais velha do que a pagina JSP. Se for o web container traduz a pagina JSP para uma classe servlet e a compila. Durante o desenvolvimento , uma das vantagens das paginas JSP sobre o servlet é que o processo de construção é feito automáticamente

Page 18: Seminário JavaServer Faces

Ciclo de vida da Pagina JSP (Cont.)

Tradução e compilação

Durante a fase de tradução cada tipo de dado na pagina JSP é tratado diferentemente. Dados estáticos são transformados em código que emitirão dados para o stream de resposta. ●

Page 19: Seminário JavaServer Faces

Ciclo de vida da Pagina JSP (Cont.)

Os elementos JSP são tratados como a seguir:

Diretivas são usadas para controlar como o web container traduz e executa a pagina JSP.

Elementos scripts são inseridos no servlet da pagina JSP.

Page 20: Seminário JavaServer Faces

Ciclo de vida da Pagina JSP (Cont.)

● Expressões Expression Language são passadas comparâmetros para as chamadas para o JSP expressionevaluator.

● jsp:[set|get]Property elemento é convertido numa chamada para método no componente JavaBeans.

Page 21: Seminário JavaServer Faces

Ciclo de vida da Pagina JSP (Cont.)

• O jsp:plugin elemento é convertido num específico browser markup para ativação num applet.

• Custom tags são convertidas em chamadas para o tag handler que implementa a custom tag.

• jsp:[include|forward] elemento é convertido numa invocação da API Java Servlet.

Page 22: Seminário JavaServer Faces

Scripts nas paginas JSP

Elementos scripts são usados tipicamente para

criar e acessar objetos, definir métodos, e

gerenciar fluxo de controle.

Muitas tarefas que usam scripts podem ser

eliminadas usando custom tag library.

Page 23: Seminário JavaServer Faces

Scripts nas paginas JSP (cont.)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML><HEAD><TITLE>JSP Expressions</TITLE><META NAME="author" CONTENT="Marty Hall"><META NAME="keywords" CONTENT="JSP,expressions,JavaServer,Pages,servlets"><META NAME="description" CONTENT="A quick example of JSP expressions."><LINK REL=STYLESHEET HREF="JSP-Styles.css" TYPE="text/css"></HEAD>

Page 24: Seminário JavaServer Faces

Scripts nas paginas JSP (cont.)

<BODY>

<H2>JSP Expressions</H2>

<UL>

<LI>Current time: <%= new java.util.Date() %>

<LI>Your hostname: <%= request.getRemoteHost() %>

<LI>Your session ID: <%= session.getId() %>

<LI>The <CODE>testParam</CODE> form parameter:

<%= request.getParameter("testParam") %>

</UL>

</BODY>

</HTML>

Page 25: Seminário JavaServer Faces

Sintaxe básica - JSP

Texto HTML– <H1>Blah</H1>– Passado para o cliente. Transformado em código

servlet: out.print("<H1>Blah</H1>");

Comentários HTML– <!-- Comentário -->– Mesmo que um outro HTML: Passado para o cliente

Comentário JSP– <%-- Comment --%>– Não envia para o cliente

Page 26: Seminário JavaServer Faces

Tipos de elementos scripts

Expressões– Formato: <%= expression %>– Avaliada e inserida na saída do servlet:

out.print(expression) Scriptlets

– Formato: <% code %>– Incorporado ao método do servlet _jspService

Declarações– Format: <%! code %>– Inserido no corpo de uma classe servlet, fora de

qualquer método.

Page 27: Seminário JavaServer Faces

Expressões JSP

Formato– <%= Java Expression %>

Result– Expressão avaliada, convertida para String, e colocada na

página HTML no local onde ocorre na página JSP.– Expressão colocada no método _jspService dentro do

out.print Exemplos

– Data: <%= new java.util.Date() %>– Hostname: <%= request.getRemoteHost() %>

Sintaxe XML– <jsp:expression>Expressão Java</jsp:expression>– Versão XML não suportada pelo TomCat 3. Deste JSP 1.2 os

servidores não eram obrigados a suportá-la.

Page 28: Seminário JavaServer Faces

Correspondência JSP/Servlet

JSP Original<H1>A Random Number</H1>

<%= Math.random() %>

Código do servlet public void _jspService(HttpServletRequest request,

HttpServletResponse response)

throws ServletException, IOException {

response.setContentType("text/html");

HttpSession session = request.getSession(true);

JspWriter out = response.getWriter();

out.println("<H1>A Random Number</H1>");

out.println(Math.random());

...

}

Page 29: Seminário JavaServer Faces

JavaServer Faces (JSF)

Introdução Ciclo de vida Usando JSF em paginas JSP Usando tags JSF Usando dados localizados Conversores e validadores. Backing Bean

Page 30: Seminário JavaServer Faces

JSF – Introdução

É um framework do lado servidor baseado em

aplicações WEB.

Page 31: Seminário JavaServer Faces

JSF – Introdução (cont.)

JSF contém:

• JavaBeans • Event Listener• Páginas JSP• Classes auxiliares do lado do servidor• Biblioteca de componentes UI• Biblioteca de event handlers, validators, e etc...

Page 32: Seminário JavaServer Faces

JSF – Introdução (cont.)

Backing Beans Arquivo de configuração da aplicação

Page 33: Seminário JavaServer Faces

JSF – Ciclo de vida

Page 34: Seminário JavaServer Faces

JSF – Usando JSF em páginas JSP

Definir entrada para JSF HTML render kit Definir entrada para JSF Core tag lib

<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>

<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>

Page 35: Seminário JavaServer Faces

Usando JSF em páginas JSP (cont.)

As tags suportam os seguintes atributos:

• Id: Único identificador do componente.

• Imediate: Se true, indica que qualquer evento, validação, e conversão associado a um componente será aplicada na fase request value ou nas próximas fases.

Page 36: Seminário JavaServer Faces

Usando JSF em páginas JSP (cont.)

Style: Especifica um cascading style sheet (css) para a tag.

styleClass: Especifica um css styleshet que contém definições de estilo.

Value: Identifica uma fonte de dados externa e associa seu valor a ele.

Page 37: Seminário JavaServer Faces

Usando JSF em páginas JSP (cont.)

Binding: identifica um bean property e associa o componente instanciado por ele.

Page 38: Seminário JavaServer Faces

Usando dados localizados

Textos estáticos(labels, textos alternativos,etc)

Mensagens de erro Dados dinâmicos

Para carregar dados localizados temos que:

1. Registrar o resource bundle

2. Carregar o resource bundle

<f:loadBundle var=“b1” basename=“m.mens” />

Page 39: Seminário JavaServer Faces

Conversores e Validadores (cont.)

Para registrar conversores padrões:• Associar value do componente para o backing

bean do mesmo tipo.• Referenciar o converter pela classe ou pelo

atributo ID da tag do componente.• Usar tag converterId ou tag binding aninhado

no componente.

Page 40: Seminário JavaServer Faces

Conversores e Validadores (cont.)

Via backing bean Integer age = 0; public Integer getAge(){ return

age;} public void setAge(Integer age) {this.age = age;}

Via atributo converter <h:inputText   converter="javax.faces.convert.IntegerConverter" />

Page 41: Seminário JavaServer Faces

Conversores e Validadores (cont.)

BigDecimalConverter, BigIntegerConverter, BooleanConverter, ByteConverter,CharacterConverter DateTimeConverter, DoubleConverter, FloatConverter,

IntegerConverter, LongConverter,NumberConverter, ShortConverte

Page 42: Seminário JavaServer Faces

Conversores e Validadores (cont.)

DataTimeConverter<h:outputText value="#{cashier.shipDate}">  <f:convertDateTime dateStyle="full" /> </h:outputText>

NumberConverter<h:outputText value="#{cart.total}" >   

<f:convertNumber type="currency" </h:outputText>

Page 43: Seminário JavaServer Faces

Conversores e Validadores (cont.)

Registrando value-change listener<h:inputText value="#{c.name}">       

<f:valueChangeListener type="l.NameChanged" /> </h:inputText>

Registrando action listener no componente<h:commandLink action="bookstore">

   <f:actionListener type="listeners.LocaleChange" /> </h:commandLink>

Page 44: Seminário JavaServer Faces

Conversores e Validadores (cont.)

Validadores padrãoDoubleRangeValidator

LengthValidator LongRangeValidator

Exemplo:<h:inputText id="q" size="4"

value="#{item.quantity}" required=“true”>   <f:validateLongRange minimum="1"/> </h:inputText> <h:message for="quantity"/>

Page 45: Seminário JavaServer Faces

Backing Bean

Suas propriedades devem referenciar: Um valor do componente Uma instância do componente Uma instância do converter Uma instância do listener Uma instância do validator

Page 46: Seminário JavaServer Faces

Backing Bean (cont.)

private Integer userNumber = null;

public void setUserNumber(Integer user_number)

{   userNumber = user_number; }

public Integer getUserNumber() {   return userNumber; } public String getResponse() {   ... }

Page 47: Seminário JavaServer Faces

Backing Bean (cont.)

Configuração:

<managed-bean>   <managed-bean-name>UserNumberBean</managed-bean-name>   

<managed-bean-class>g.UserNumBean</managed-bean-class>   <managed-bean-scope>session</managed-bean-scope>

</managed-bean>

Page 48: Seminário JavaServer Faces

Fórmula p/ usar JSF

1. Criar um bean representando os dados de um formulário

2. Usar as tags do JSF para criar o formulário

3. Especificar na tag h:commandButton um método a ser chamado quando o formulário for enviado (ActionController)

Page 49: Seminário JavaServer Faces

Fórmula p/ usar JSF (cont.)

4.Criar o Action Controller - suas responsabilidades são:

●Ler os dados do formulário●Chamar a lógica de negócio●Popular os beans que contém os resultados●Devolver uma condição

Page 50: Seminário JavaServer Faces

Fórmula p/ usar JSF (cont.)

5. Declarar o form bean e as regras de navegação no descritor faces-config.xml

6. Criar as páginas JSP para cada condição devolvida

Page 51: Seminário JavaServer Faces

Exemplo

Formulário de cadastro, onde os dados fornecidos

pelo usuário farão com que o JSF tome a de qual

pagina será mostrada a seguir.

Page 52: Seminário JavaServer Faces

Exemplo (cont.)

<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>

<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>

<f:view>…<h:form>Nome: <h:inputText

value=“#{bean.nome”/><BR>

Page 53: Seminário JavaServer Faces

Exemplo (cont.)

Sobrenome: <h:inputText value=“#{bean.sobrenome}”/><BR> ...

<h:commandButton

value=“Cadastrar Dados"

action="#{bean.cadastrar}"/>

</h:form>…

</f:view>

Page 54: Seminário JavaServer Faces

Exemplo (cont.)

Criando um action controller

package exemplo;

public class CadastroBean {private String nome = “”;private String sobrenome = “”;

// getters e setters...

Page 55: Seminário JavaServer Faces

Exemplo (continuação)

public String cadastrar() {if (nome.trim().equals(“”) ||

sobrenome.trim().equals(“”) ) {return(“rejeitado");

} else {return(“aceito");

}}

}

Page 56: Seminário JavaServer Faces

Exemplo (cont.)

Declarando o action controller

<faces-config><managed-bean><managed-bean-name>

bean</managed-bean-name><managed-bean-class>

exemplo.CadastroBean</managed-bean-class>

Page 57: Seminário JavaServer Faces

Exemplo (cont.)

<managed-bean-scope>

request

</managed-bean-scope>

</managed-bean>

</faces-config>

Page 58: Seminário JavaServer Faces

Exemplo

Especificando regras de navegação

<faces-config><navigation-rule>

<from-view-id>/cadastro.jsp</from-view-id><navigation-case>

<from-outcome>aceito

</from-outcome><to-view-id>

Page 59: Seminário JavaServer Faces

Exemplo

(continuação) /WEB-INF/result/aceito.jsp

</to-view-id></navigation-case><navigation-case>

<from-outcome>rejeitado

</from-outcome><to-view-id>

/WEB-INF/results/rejeitado.jsp

Page 60: Seminário JavaServer Faces

Exemplo

(continuação)

</to-view-id>

</navigation-case>

</navigation-rule>

</faces-config>

Page 61: Seminário JavaServer Faces

Exemplo (cont.)

<HTML>

<HEAD>…</HEAD>

<BODY>

Cadastro do usuário ${bean.nome}

${bean.sobrenome} aceito. Parabéns.

</BODY></HTML>

Page 62: Seminário JavaServer Faces

Exemplo (cont.)

<HTML>

<HEAD>…</HEAD>

<BODY>

Cadastro rejeitado.<br/>

<A HREF=“cadastro.faces">Tente de novo</A>.

</BODY></HTML>

Page 63: Seminário JavaServer Faces

Referências

• Tutorial JEE da Sun: http://java.sun.com/javaee/5/docs/tutorial/doc/

• www.coreservlets.com• Geary, David; Horstmann Cay - Core

JavaServer Faces, 2004• Bergsten, Hans; JavaServer Faces, O’Reilly,

2004