Post on 14-Jul-2015
transcript
Introdução - Taglibs Conjuntos de tags XML personalizadas,
projetadas para utilização em páginas JSP
“Um mecanismo portável para encapsular funcionalidades reutilizáveis em páginas
da Web”
Contextos de Utilização Geração de trechos de código HTML Acesso a informações transientes (atributos
de sessão ou requisição) Acesso a recursos J2EE (Javabeans, EJBs,
JavaMail) Formatação de Apresentação (datas, acesso a
atributos) Encapsulamento de operações lógicas (laços,
condições, iterações) Manipulação de documentos XML
Especificação JSP 1.0 Namespace padrão de taglibs
Tags para acesso a Javabeans e objetos em contexto
useBean setProperty getProperty
Tags para inclusão de páginas e conteúdos Include Forward Plugin
Scriptlets versus Taglibs
<html><head><title>…</title></html><body><%ObjetoBla bla = new ObjetoBla();bla.setNome(“Herval”);%>Hello <%= bla.getNome() %> !!<br><% ObjetoBla meuObjeto = (ObjetoBla)session.getAttribute(“meuObjeto”);%>Hello <%= meuObjeto.getNome() %> !!</body></html>
Acessando objetos utilizando Scriptlets
Scriptlets versus Taglibs
<html>
<head><title>…</title></html>
<body>
<jsp:useBean id=“bla" class=“ObjetoBla” scope=“page">
<jsp:setProperty name=“bla” property=“nome” value=“Herval”/>
Hello <jsp:getProperty name=“bla" property="nome"/>
<br>
<jsp:useBean id=“meuObjeto" class=“ObjetoBla” scope=“session">
Hello <jsp:getProperty name=“meuObjeto" property="nome"/>
</body>
</html>
Acessando objetos utilizando Taglibs
Taglibs Customizadas Introduzidas na especificação JSP 1.1
Capacidade de desenvolvimento de tags personalizadas
Tags capazes de gerar código HTML ou encapsular regras de negócio e condições
Acesso uniformizado a recursos e objetos Remoção de código Java dos arquivos JSP Reutilização (Building blocks) Acesso ao contexto das páginas, request, session,
etc
Tag Handlers Objetos que definem o comportamento
de uma tag Tags com corpo
Implements BodyTag Tags sem corpo
Implements Tag
Utilização das Taglibs customizadas
Webdesigners e especialistas em interface utilizam-se das taglibs na apresentação Interface uniformizada Modificações nas tags refletem-se em todas as páginas que
as utilizam
Especialistas em lógica de negócio desenvolvem tags para acessar dados e serviços Acesso correto a dados e serviços Encapsulamento de objetos e de acesso aos mesmos
Criação de uma Taglib Escreva a classe de tag (tag handler) Defina um descritor de tag library (tld) Registre a taglib no servidor web Importe a taglib na página Utilize as tags customizadas
Criando uma Taglib personalizada
Classes de tags personalizadas Implementam javax.servlet.jsp.tagext.Tag
Descritor Arquivo XML com descrição das tags (.tld)
Uma classe de tag simplespackage javaone.tag;import java.text.*;import java.util.*;import javax.servlet.jsp.*;
public class DateTag extends javax.servlet.jsp.tagext.TagSupport { public int doStartTag() throws JspException { Locale loc = pageContext.getRequest().getLocale();
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.MEDIUM, loc);
try { pageContext.getOut().write(dateFormat.format(date)); } catch (java.io.IOException ioe) {
throw new JspException(ioe.getMessage()); }
return SKIP_BODY; }}
Descritor myTaglib.tld<?xml version="1.0" encoding="ISO-8859-1" ?><!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library
1.2//EN”"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"><taglib>
<tlib-version>1.0</tlib-version><jsp-version>1.2</jsp-version><short-name>javaone2001-taglib</short-name><uri>http://www.concise.co.uk/javaone2001-taglib</uri><description>Tag library for JavaOne 2001 BOF examples</description>
<tag><name>date</name><tag-class>javaone.tag.DateTag</tag-class><body-content>empty</body-content><description>Inserts the date into the page</description>
</tag></taglib>
Configuração da aplicação web (web.xml)
<?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE web-app PUBLIC "-//Sun Microsystems,
Inc.//DTD Web Application 2.3//EN”"http://java.sun.com/j2ee/dtds/web-app_2_3.dtd"><web-app>...<taglib>
<taglib-uri>/javaoneTaglib</taglib-uri><taglib-location>/WEB-INF/tlds/myTaglib.tld</taglib-location>
</taglib>...</web-app>
Utilizando uma taglib personalizada
<html>
<head>
<title>…</title>
<%@ taglib uri="/javaoneTaglib" prefix="j1” %>
</head>
<body>
<h1>
The date is <j1:date/>
</h1>
</body>
</html>
Vantagens das Taglibs sobre os JavaBeans
Tags personalizadas não necessitam de chamadas a construtores
Taglibs têm acesso automático ao contexto das páginas
Sugestão de implementação
Taglib CAP – Controle de Apresentação Politec
Conjunto de tags customizadas proprietário
Motivação: acelerar o processo de desenvolvimento de páginas JSP na Politec - João Pessoa
Taglib CAP – Utilizações Previstas Preenchimento automático de campos em formulários
Recuperação transparente de dados em sessão, request ou controle de apresentação
Encapsulamento de validação de campos com Javascripts Redução e uniformização do código HTML através de
encapsulamento de chamadas repetidas Exibição automática de fragmentos de HTML
padronizados (linhas de status, links “voltar” e “ajuda”) Modificações no padrão afetariam todas as páginas do
conjunto
Taglib CAP – Desenvolvimento Atual
Tag <cap:input/> Provê recuperação automática do conteúdo
de campos armazenados no Controle de Apresentação
Taglib CAPExemplo de recuperação de parâmetro
<html><head><title>…</title><% Elemento controleApresentacao =
(Elemento)session.getAttribute(ServletATF.CA_CONTROLE_APRESENTACAO); String hidStatus = controleApresentacao.getValor(“hidStatus”); if (hidStatus == null) { hidStatus = “”; }%></head><body><h1> <form> <input type=“hidden” name=“hidStatus” value=“<%=hidStatus%>” > </form></h1></body></html>
Exemplo 1: Utilização de Controle de Apresentação
Taglib CAPExemplo de recuperação de parâmetro
<html>
<head>
<%@ taglib uri="/capTaglib" prefix=“cap” %>
<title>…</title>
</head>
<body>
<h1>
<form>
<cap:input type=“hidden” name=“hidStatus” />
</form>
</h1>
</body>
</html>
Exemplo 2: Utilização de Controle de Apresentação + Taglib CAP
Taglib CAPIdéias para implementação
<cap:operacaoConcluida>Texto de operação bem sucedida...
</cap:operacaoConcluida> Encapsulamento de testes condicionais
sobre sucesso de uma operação
Referências Encapsulate reusable functionality in JSP tags : build
your own custom JSP tag with Tomcat http://www.javaworld.com/javaworld/jw-08-2000/jw-0811-
jsptags.html JavaServer Pages home
http://java.sun.com/products/jsp/ http://java.sun.com/products/jsp/taglibraries.html
Standard tag library http://java.sun.com/aboutJava/communityprocess/j sr/jsr_052_jsptaglib.html
Struts http://jakarta.apache.org/struts/