Você está na página 1de 63

Seminrio JavaServer Faces

Paulo Venancio Lopes Daniel Sguillaro

Tpicos
Introduo Aplicao Web Tecnologia Java Servlet Custom Tags JavaServer Pages JavaServer Faces

Aplicao Web
Aplicao web a extenso dinmica da web ou application server, e so divididas em dois tipos: Presentation-oriented: Cria pginas interativas contendo HTML, XML, e outros, e contedos dinmicos em resposta a uma requisio. Service-oriented: Implementa a parte final de um web service. Aplicaes presentation-oriented so frequentemente clientes de uma aplicao serviceoriented web.

Aplicao web (continuao)


Interao entre um cliente e uma aplicao web:

Aplicao web (continuao)


Servlets: so classes java que dinamicamente processam requisies e constroem respostas.

Paginas JSP: so documentos textos que so executados como servlets e so apropriados para gerao de markup language tais com HTML, SVG, WML, e XML.

Aplicao web (continuao)


Relao entre as tecnologias de aplicao java web

Ciclo de vida da aplicao Web

Desenvolvimento do cdigo do componente web. Desenvolvimento do descritor de implantao. Compilar componentes da aplicao web e classe auxilares. Opcionalmente empacotar a aplicao em uma unidade de implantao. Implantar a aplicao em um web container. Acessar a URL que referncia a aplicao web.

Mdulo Web

Empacotando Mdulos Web


Um mdulo 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 mdulo diretamente.

Implantando Mdulo Web


Pode-se implantar o mdulo de duas forma: 1. Copiando o mdulo web para o diretrio de implantao do web container.

2. Copiando o pacote do mdulo web (arquivo *.war) no diretrio de implantao do web container.
Obs1: Pode-se ainda no caso do Tomcat configurar o descritor server.xml para que identifique o mdulo web. Obs2: Um context root identifica a aplicao web num JEE server (ex: http://host:port/context_root/alias).

Tecnologia Java Servlet


Um servlet uma classe java que extende as capacidades do servidor que acessam aplicaes num modelo de programa requisio e resposta. Todos os servlets podem responder qualquer tipo de requisio, para cada aplicao a tecnologia java servlet define classes servlet especificas para HTTP.

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 mtodos de ciclo de vida

Ciclo de Vida do Servlet


O ciclo de vida de um servlet controlado pelo container no qual o servlet tenha sido implantado. Quando uma requisio mapeada para o servlet, o container performa os seguintes passos.
1. Se uma instncia do servlet no existe, o web

container : a. Carrega a classe do servlet.

Ciclo de Vida do Servlet (cont.)


b. Cria uma instncia da classe do servlet. c. Inicializa a instncia do servlet chamando o mtodo init. 2. Invoca o mtodo service, passando os objetos request e response . Obs: Se o container necessitar remover o servlet , ele finaliza o servlet chamando o mtodo destroy.

Custom Tags numa pgina JSP


o elemento da linguagem JSP definida por um Usurio. <%@ taglib uri="/tlt" prefix="tlt" %> <html> <body bgcolor="white"> <tlt:iterator var="departmentName" type="java.lang.String" group="${myorg.department Names}"> </body> </html>

Tecnologia JavaServer Pages


JavaServer Pages (JSP) permite fcil criao de contedos web sendo ambos componentes dinmicos e estticos. Pgina JSP um documento texto que contm dois tipos de textos: dados estticos (HTML, SVG, WML, XML, e outros), e elementos JSP, para construir contedos dinmicos (recomenda-se a extenso *.jsp).

Ciclo de vida da Pagina JSP


So determinadas pela tecnologia Java Servlet.

Quando um request mapeado para uma pgina 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 construo feito automticamente

Ciclo de vida da Pagina JSP (Cont.)

Traduo e compilao Durante a fase de traduo cada tipo de dado na pagina JSP tratado diferentemente. Dados estticos so transformados em cdigo que emitiro dados para o stream de resposta.

Ciclo de vida da Pagina JSP (Cont.)


Os elementos JSP so tratados como a seguir:

Diretivas so usadas para controlar como o web container traduz e executa a pagina JSP. Elementos scripts so inseridos no servlet da pagina JSP.

Ciclo de vida da Pagina JSP (Cont.)


Expresses Expression Language so passadas comparmetros para as chamadas para o JSP expressionevaluator.

jsp:[set|get]Property elemento convertido numa chamada para mtodo no componente JavaBeans.

Ciclo de vida da Pagina JSP (Cont.)

O jsp:plugin elemento convertido num especfico browser markup para ativao num applet. Custom tags so convertidas em chamadas para o tag handler que implementa a custom tag. jsp:[include|forward] elemento convertido numa invocao da API Java Servlet.

Scripts nas paginas JSP

Elementos scripts so usados tipicamente para criar e acessar objetos, definir mtodos, e gerenciar fluxo de controle. Muitas tarefas que usam scripts podem ser eliminadas usando custom tag library.

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>

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>

Sintaxe bsica - JSP

Texto HTML

<H1>Blah</H1> Passado para o cliente. Transformado em cdigo servlet:

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

Comentrios HTML

<!-- Comentrio --> Mesmo que um outro HTML: Passado para o cliente

Comentrio JSP

<%-- Comment --%> No envia para o cliente

Tipos de elementos scripts

Expresses

Formato: <%= expression %> Avaliada e inserida na sada do servlet: out.print(expression)


Formato: <% code %> Incorporado ao mtodo do servlet _jspService

Scriptlets

Declaraes

Format: <%! code %> Inserido no corpo de uma classe servlet, fora de qualquer mtodo.

Expresses JSP

Formato

<%= Java Expression %>


Expresso avaliada, convertida para String, e colocada na pgina HTML no local onde ocorre na pgina JSP. Expresso colocada no mtodo _jspService dentro do out.print Data: <%= new java.util.Date() %> Hostname: <%= request.getRemoteHost() %> <jsp:expression>Expresso Java</jsp:expression> Verso XML no suportada pelo TomCat 3. Deste JSP 1.2 os

Result

Exemplos

Sintaxe XML

Correspondncia JSP/Servlet

JSP Original

<H1>A Random Number</H1> <%= Math.random() %>

Cdigo 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()); ... }

JavaServer Faces (JSF)


Introduo Ciclo de vida Usando JSF em paginas JSP Usando tags JSF Usando dados localizados Conversores e validadores. Backing Bean

JSF Introduo
um framework do lado servidor baseado em aplicaes WEB.

JSF Introduo (cont.)


JSF contm:

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

JSF Introduo (cont.)


Backing Beans Arquivo de configurao da aplicao

JSF Ciclo de vida

JSF Usando JSF em pginas 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" %>

Usando JSF em pginas JSP (cont.)


As tags suportam os seguintes atributos:

Id: nico identificador do componente. Imediate: Se true, indica que qualquer evento, validao, e converso associado a um componente ser aplicada na fase request value ou nas prximas fases.

Usando JSF em pginas JSP (cont.)

Style: Especifica um cascading style sheet (css) para a tag. styleClass: Especifica um css styleshet que contm definies de estilo. Value: Identifica uma fonte de dados externa e associa seu valor a ele.

Usando JSF em pginas JSP (cont.)

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

Usando dados localizados


Textos estticos(labels, textos alternativos,etc) Mensagens de erro Dados dinmicos Para carregar dados localizados temos que: 1. Registrar o resource bundle 2. Carregar o resource bundle <f:loadBundle var=b1 basename=m.mens />

Conversores e Validadores (cont.)


Para registrar conversores padres: 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.

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.I ntegerConverter" />

Conversores e Validadores (cont.)

BigDecimalConverter, BigIntegerConverter, BooleanConverter, ByteConverter,CharacterConverter DateTimeConverter, DoubleConverter, FloatConverter, IntegerConverter, LongConverter,NumberConverter, ShortConverte

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>

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>

Conversores e Validadores (cont.)

Validadores padro DoubleRangeValidator LengthValidator LongRangeValidator Exemplo: <h:inputText id="q" size="4" value="#{item.quantity}" required=true> <f:validateLongRange minimum="1"/> </h:inputText> <h:message for="quantity"/>

Backing Bean
Suas propriedades devem referenciar: Um valor do componente Uma instncia do componente Uma instncia do converter Uma instncia do listener Uma instncia do validator

Backing Bean (cont.)


private Integer userNumber = null; public void setUserNumber(Integer user_number) { userNumber = user_number; } public Integer getUserNumber() { return userNumber; } public String getResponse() { ... }

Backing Bean (cont.)


Configurao: <managed-bean> <managed-beanname>UserNumberBean</managed-beanname> <managedbean-class>g.UserNumBean</managed-beanclass> <managed-beanscope>session</managed-bean-scope> </managed-bean>

Frmula p/ usar JSF


1. Criar um bean representando os dados de um formulrio 2. Usar as tags do JSF para criar o formulrio 3. Especificar na tag h:commandButton um mtodo a ser chamado quando o formulrio for enviado (ActionController)

Frmula p/ usar JSF (cont.)


4.Criar o Action Controller - suas responsabilidades so: Ler os dados do formulrio Chamar a lgica de negcio Popular os beans que contm os resultados Devolver uma condio

Frmula p/ usar JSF (cont.)


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

6. Criar as pginas JSP para cada condio devolvida

Exemplo

Formulrio de cadastro, onde os dados fornecidos pelo usurio faro com que o JSF tome a de qual pagina ser mostrada a seguir.

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>

Exemplo (cont.)
Sobrenome: <h:inputText value=#{bean.sobrenome}/><BR> ... <h:commandButton value=Cadastrar Dados" action="#{bean.cadastrar}"/> </h:form> </f:view>

Exemplo (cont.)
Criando um action controller package exemplo;

public class CadastroBean { private String nome = ; private String sobrenome = ; // getters e setters ...

Exemplo (continuao)
public String cadastrar() { if (nome.trim().equals() || sobrenome.trim().equals() ) { return(rejeitado"); } else { return(aceito"); } } }

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>

Exemplo (cont.)

<managed-bean-scope> request </managed-bean-scope> </managed-bean> </faces-config>

Exemplo
Especificando regras de navegao <faces-config> <navigation-rule> <from-view-id>/cadastro.jsp</from-view-id> <navigation-case> <from-outcome> aceito </from-outcome> <to-view-id>

Exemplo
(continuao) /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

Exemplo
(continuao) </to-view-id> </navigation-case> </navigation-rule> </faces-config>

Exemplo (cont.)
<HTML> <HEAD></HEAD> <BODY> Cadastro do usurio ${bean.nome} ${bean.sobrenome} aceito. Parabns. </BODY></HTML>

Exemplo (cont.)
<HTML> <HEAD></HEAD> <BODY> Cadastro rejeitado.<br/> <A HREF=cadastro.faces">Tente de novo</A>. </BODY></HTML>

Referncias

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, OReilly, 2004

Você também pode gostar