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 s etProperty 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&quot; class=“ObjetoBla” scope=“page&quot;> <jsp:setProperty name=“bla” property=“nome” value=“Herval”/> Hello  <jsp:getProperty name=“bla&quot; property=&quot;nome&quot;/> <br> <jsp:useBean id=“meuObjeto&quot; class=“ObjetoBla” scope=“session&quot;> Hello  <jsp:getProperty name=“meuObjeto&quot; property=&quot;nome&quot;/> </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  simples package 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=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot; ?> <!DOCTYPE taglib PUBLIC &quot;-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN” &quot;http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd&quot;> <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=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot;?> <!DOCTYPE web-app PUBLIC &quot;-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN” &quot;http://java.sun.com/j2ee/dtds/web-app_2_3.dtd&quot;> <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=&quot;/javaoneTaglib&quot; prefix=&quot;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 CAP Exemplo 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 CAP Exemplo de recuperação de parâmetro <html> <head> <%@ taglib uri=&quot;/capTaglib&quot; 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 CAP Idé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/

Tag Libraries

  • 1.
    Tag Libraries HervalFreire de Albuquerque Júnior Junho de 2002
  • 2.
    Introdução - TaglibsConjuntos 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”
  • 3.
    Contextos de UtilizaçãoGeraçã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
  • 4.
    Especificação JSP 1.0Namespace padrão de taglibs Tags para acesso a Javabeans e objetos em contexto useBean s etProperty getProperty Tags para inclusão de páginas e conteúdos Include Forward Plugin
  • 5.
    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
  • 6.
    Scriptlets versus Taglibs <html> <head><title>…</title></html> <body> <jsp:useBean id=“bla&quot; class=“ObjetoBla” scope=“page&quot;> <jsp:setProperty name=“bla” property=“nome” value=“Herval”/> Hello <jsp:getProperty name=“bla&quot; property=&quot;nome&quot;/> <br> <jsp:useBean id=“meuObjeto&quot; class=“ObjetoBla” scope=“session&quot;> Hello <jsp:getProperty name=“meuObjeto&quot; property=&quot;nome&quot;/> </body> </html> Acessando objetos utilizando Taglibs
  • 7.
    Taglibs CustomizadasIntroduzidas 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
  • 8.
    Tag Handlers Objetosque definem o comportamento de uma tag Tags com corpo Implements BodyTag Tags sem corpo Implements Tag
  • 9.
    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
  • 10.
    Criação de umaTaglib 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
  • 11.
    Criando uma Taglib personalizada Classes de tags personalizadas Implementam javax.servlet.jsp.tagext.Tag Descritor Arquivo XML com descrição das tags (.tld)
  • 12.
    Uma classe de tag simples package 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; } }
  • 13.
    Descritor myTaglib.tld<?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot; ?> <!DOCTYPE taglib PUBLIC &quot;-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN” &quot;http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd&quot;> <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>
  • 14.
    Configuração da aplicaçãoweb (web.xml) <?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot;?> <!DOCTYPE web-app PUBLIC &quot;-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN” &quot;http://java.sun.com/j2ee/dtds/web-app_2_3.dtd&quot;> <web-app> ... <taglib> <taglib-uri>/javaoneTaglib</taglib-uri> <taglib-location>/WEB-INF/tlds/myTaglib.tld</taglib-location> </taglib> ... </web-app>
  • 15.
    Utilizando uma taglibpersonalizada <html> <head> <title>…</title> <%@ taglib uri=&quot;/javaoneTaglib&quot; prefix=&quot;j1” %> </head> <body> <h1> The date is <j1:date/> </h1> </body> </html>
  • 16.
    Vantagens das Taglibssobre os JavaBeans Tags personalizadas não necessitam de chamadas a construtores Taglibs têm acesso automático ao contexto das páginas
  • 17.
    Sugestão de implementaçãoTaglib 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
  • 18.
    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
  • 19.
    Taglib CAP –Desenvolvimento Atual Tag < cap:input/> Provê recuperação automática do conteúdo de campos armazenados no Controle de Apresentação
  • 20.
    Taglib CAP Exemplode 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
  • 21.
    Taglib CAP Exemplode recuperação de parâmetro <html> <head> <%@ taglib uri=&quot;/capTaglib&quot; 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
  • 22.
    Taglib CAP Idéiaspara implementação <cap:operacaoConcluida> Texto de operação bem sucedida... </cap:operacaoConcluida> Encapsulamento de testes condicionais sobre sucesso de uma operação
  • 23.
    Referências Encapsulate reusablefunctionality 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/