seminário javaserver faces

63
Seminário JavaServer Faces Paulo Venancio Lopes Daniel Sguillaro

Upload: zlata

Post on 09-Jan-2016

35 views

Category:

Documents


0 download

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

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