Tag Libraries

23
Tag Libraries Herval Freire de Albuquerque Júnior Junho de 2002

Transcript of Tag Libraries

Tag Libraries

Herval Freire de Albuquerque Júnior

Junho de 2002

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/