advertisement

Tag Libraries

50 %
50 %
advertisement
Information about Tag Libraries

Published on June 3, 2007

Author: herval

Source: slideshare.net

advertisement

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”

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

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

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

<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>

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

<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>

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

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

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

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

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)

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; } }

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>

<?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>

<?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>

<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

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 – 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

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

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

<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>

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

<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>

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

<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/

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/

Add a comment

Related pages

Tag Libraries - JSP Tutorial

Tag Libraries JSP 1.1 introduces a method of extending JSP tags, called "tag libraries". These libraries allow addition of tags similar to jsp:include or ...
Read more

Tag-Library – Wikipedia

Tag-Libraries sind ein Bestandteil der JSP-Spezifikation. Mit dem Einsatz von Java Server Pages hat man bereits erreicht, dass nur noch wenig Java-Code ...
Read more

JavaServer Pages - Wikipedia, the free encyclopedia

JavaServer Pages (JSP) is a technology that helps software developers create dynamically generated web pages based on HTML, XML, or other document types.
Read more

JSP Standard Tag Library (JSTL) Tutorial - Tutorials for ...

JSP Standard Tag Library (JSTL) Tutorial - Learning JSP (Java Server Pages) in simple and easy steps using this beginner's tutorial containing basic to ...
Read more

JavaServer Pages Standard Tag Library - Oracle ...

JavaServer Pages Standard Tag Library. JavaServer Pages Standard Tag Library (JSTL) encapsulates as simple tags the core functionality common to many Web ...
Read more

JavaServer Pages Standard Tag Library - The Java EE 5 Tutorial

Chapter 7 JavaServer Pages Standard Tag Library. The JavaServer Pages Standard Tag Library (JSTL) encapsulates core functionality common to many JSP ...
Read more

JavaServer Pages Standard Tag Library - Wikipedia, the ...

The JavaServer Pages Standard Tag Library (JSTL) is a component of the Java EE Web application development platform. It extends the JSP specification by ...
Read more

JSP Standard Tag Libraries, Part 1 - O'Reilly Media

JSP Standard Tag Libraries, Part 1 03/13/2002. Many of us have been working with the Java Server Pages technology for quite some time and have become ...
Read more

Manage tag libraries in Dreamweaver - Adobe Support

Use the Tag Library editor in Dreamweaver to add and delete tag libraries, tags, attributes, and attribute values; set properties for a tag library; and ...
Read more

Designing JSP Custom Tag Libraries - O'Reilly Media

Then each tag contained in the library is described. There can be one or many tags per library. There is only one TLD element required for all tags, and ...
Read more