J550 Como criar Custom Tags

Documentos relacionados
J550 Tag Libraries e JSTL

Java 2 Enterprise Edition Construção de Aplicações Web

Framework web baseado em taglibs para gerenciamento de conteúdo

Aplicações Web com Servlets e JSP

Java II. Sérgio Luiz Ruivace Cerqueira

Java 2 Standard Edition Classes internas

Tutorial para criação de componentes JSF Facelets Por Érico GR 07/08/2007

Unidade 6: Java Server Pages Prof. Daniel Caetano

Programação para Internet II

J550. Model View Controller

J550. Apache Struts. Helder da Rocha

Material de Apoio Profº Alan Cleber Borim

DESENVOLVENDO FRAMEWORK WEB BASEADO EM TAGLIBS PARA GERENCIAMENTO DE CONTEÚDO

Criação de um novo projeto no Eclipse utilizando Maven

Java 2 Enterprise Edition Componentes Web J2EE

A composição de uma Java Server Pages (Diretivas, Elementos de Script e Objetos Implícitos)

Interfaces e Classes Abstratas

Java II. Sérgio Luiz Ruivace Cerqueira

extreme Programming Brasil Testes de Integraçã ção J2EE com J2EE em Jakarta C A C T U S argonavis.com.br Helder da Rocha

Java RMI. RMI Remote Method Invocation. Chamadas Remotas de Procedimentos (RPC) RPC - Implementação

J550 Integração com Bancos de Dados

Classes e Objetos. Sintaxe de classe em Java

Enterprise JavaBeansTM

Documentação. Java First-Tier: Aplicações. Documentação com javadoc. Comentários especiais. Marcas Especiais. Exemplo. Finalidade das marcas

EXERCÍCIOS DE REVISÃO DE CONTEÚDO QUESTÕES DISSERTATIVAS

9 Classes Abstractas e Interfaces

Programação orientada a objetos

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

J550 JSP com tags padrão

Unidade 7: Documentação de Código A Importância dos Comentários Prof. Daniel Caetano

Aplicações Distribuídas

Java para Desktop. Programação Orientada à Objetos 2 JSE

Engenharia de Software

JSTL: Uma forma padrão de desenvolver página WEB dinâmica Plácido Antonio de Souza Neto

Associação Carioca de Ensino Superior Centro Universitário Carioca

UNIVERSIDADE FEDERAL DE SANTA CATARINA PROGRAMA ESPECIAL DE TREINAMENTO. Curso de JSP. Roberto Hartke Neto

Aplicações Distribuídas

Java Server Pages (Diretivas, Elementos de Script e Objetos Implícitos)

Programação Java. Marco Fagundes. - Herança, Classes Abstratas e Interfaces Marco Fagundes -

Engenharia de Aplicações Sistemas Interactivos 2009/10! JAVASERVER FACES 1.2. Mestrado em Informática Universidade do Minho! 31!

J2EE. Exemplo completo Utilização Servlet. Instrutor HEngholmJr

O que é uma tag Tag tag tag tag tag tags tags HTML O que é uma tag library biblioteca de tags tags Java Standard Tag Library JSTL Tag Library JSTL

Linguagem de Programação II Implementação

Programação Orientada a Objetos. SANTOS, Rafael (PLT) e Guia de Estudo SCJP. SIERRA, Kathy e BATES, Bert

Construtores e Especificadores de Acesso

Mecanismo de Persistência

Prof. Roberto Desenvolvimento Web Avançado

PLATAFORMA SIGA RIO DAS VELHAS MANUAL DO CÓDIGO FONTE

Programação Orientada a Objetos. Prof. Diemesleno Souza Carvalho

J820. Testes de interface Web com. HttpUnit. argonavis.com.br. Helder da Rocha

J820. Mock objects. Testes de código com dependências. argonavis.com.br. Helder da Rocha

Engenharia de Software

Aula 10 POO 1 Classes Abstratas. Profa. Elaine Faria UFU

Agenda. Instalação e configuração. Processamento de comandos SQL com JDBC. Driver JDBC Criação da classe de conexão

Prof. Fernando V. Paulovich 8 de novembro de SCC Programação Orientada a Objetos

Lista 05 Herança. public class PessoaFisica extends Pessoa { private String RG; public PessoaFisica(){ super(); } public String getrg(){ return RG; }

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

3 Uma Abordagem Orientada a Aspectos para o Desenvolvimento de Frameworks

Surgindo em 1997 a API Java Servlet proporciona ao desenvolvedor a possibilidade de adicionar conteúdo dinâmico em um servidor web usando a

1 Introdução e Conceitos básicos

POO fundamentos Parte II. Professor Vicente Paulo de Camargo

TUTORIAL DE INTRODUÇÃO AO CEWOLF

Programação Java. - Classes, Objetos, Atributos e Métodos - Marco Fagundes Marco Fagundes -

Programação Orientada a Objetos

Programação Orientada a Objetos. Prof. Diemesleno Souza Carvalho

Java 2 Standard Edition Como criar classes e objetos

Recapitulando. Construtores: (Overload assinatura) public Circle() {...} public Circle(double x, double y, double r) {... }

Guia para Iniciantes do WebWork

Utilizando o Framework SubMacro no Desenvolvimento de Aplicações Java para Internet. Kleber Taffarel Novembro de 2008

Lista de exercícios 2

J820. Testes em J2EE com. Jakarta C A C T U S. argonavis.com.br. Helder da Rocha

!" # # # $ %!" " & ' ( 2

Esta categoria mais geral, à qual cada objeto pertence, denominamos de classe; IFSC/POO + JAVA - prof. Herval Daminelli

Programação Orientada a Objetos

aplicações Web em JavaTM

Desenvolvimento Web com Framework Demoiselle versão 1.0

Universidade da Beira Interior

Agilizando o processo de redeploy de aplicações Java

Integração com Banco de Dados

Classe Abstrata e Interface

ORIENTAÇÃO A OBJETOS SISTEMAS DE INFORMAÇÃO DR. EDNALDO B. PIZZOLATO

Arquitetura de Aplicações JSP/Web. Padrão Arquitetural MVC

Java Standard Edition (JSE)

Universidade Federal de Uberlândia Faculdade de Computação Programação Orientada a Objetos II Prof. Fabiano Dorça. Padrão Observer (Observador)

Manual de Utilização da Biblioteca VisPublica

Java na WEB Servlet. Sumário

POO Programação Orientada a Objetos

Linguagem de Programação Orientada a Objeto Polimorfismo, Classes Abstractas e Interfaces

TUTORIAL ANDROID ACTIVITY - CONSTRUÇÃO DE TELAS

Extensão de classes em Java - noções elementares - PCO / PPO Departamento de Informática Faculdade de Ciências da Universidade de Lisboa

Computação II Orientação a Objetos

Vamos falar de Hibernate?

Exceções AULA 13. Ricardo Massa F. Lima Sérgio C. B. Soares

Entrada e Saída Exercício. Linguagem Java. Adenilso da Silva Simão 01/09/05

nome = n; cargo = c; salario = s; public void print() { System.out.println(nome cargo salario); public void aumento( double fator){

COMPORTAMENTOS - Observações

INE 5612 Professor: Frank Siqueira. Leonardo Silva Jean Ercilio Thiago

Tencologia em Análise e Desenvolvimento de Sistemas Disciplina: WEB I Conteúdo: WEB Container Aula 04

Transcrição:

J550 Como criar Custom Tags Helder da Rocha (helder@acm.org) www.argonavis.com.br 1

Objetivos Este é um módulo opcional. Explora os fundamentos para criação de custom tags Funcionamento: como fazer um custom tag Exemplos de tags simples Não exploramos aspectos mais avançados A criação de uma biblioteca de custom tags complexa não é uma tarefa comum para a maior parte dos desenvolvedores. É mais comum reutilizar tags existentes e criar alguns mais simples Veja exemplos de tags mais elaborados no diretório do CD correspondente a este capítulo 2

Como criar um custom Tag Para criar um custom tag é preciso programar usando as APIs javax.servlet.jsp e javax.servlet.jsp.tagext Resumo dos passos típicos Escreva uma classe que implemente a interface Tag ou BodyTag (ou as adaptadores TagSupport e BodyTagSupport) Implemente os métodos do ciclo de vida desejados Escreva um descritor TLD ou acrescente os dados de seu tag a um TLD existente Empacote tudo em um JAR Inclua o JAR em um WAR e use os tags em suas páginas 3

API Pacote javax.servlet.jsp.tagext: principais componentes Interfaces Tag BodyTag IterationTag Classes TagSupport BodyTagSupport BodyContent «interface» java.io.writer JspWriter «interface» Tag TagSupport «interface» BodyTag BodyContent BodyTagSupport 4

Exemplo (tag usado em capítulo anterior) No capítulo 11 mostramos como usar um custom tag muito simples <exemplo:datahoje /> que tinha como resultado Tuesday, May 5, 2002 13:13:13 GMT-03 Para construir este tag é preciso 1. Escrever a classe que o implementa 2. Declará-lo em seu arquivo TLD Para distribuí-lo, encapsule tudo em um JAR que o usuário do tag possa colocar em seu WEB-INF/lib 5

Configuração do Tag <?xml version="1.0"?> <!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>exemplo</short-name> <uri>http://abc.com/ex</uri> <tag> <name>datahoje</name> <tag-class>exemplos.datetag</tag-class> <description>data de hoje</description> </tag> Sugestão de prefixo (autor de página pode escolher outro na hora) URI identifica o prefixo. (autor de página tem que usar exatamente esta URI) </taglib> 6

Implementação import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; Para tags que não precisam processar o corpo use a interface Tag ou sua implementação TagSupport public class DateTag extends TagSupport { /** Use dostarttag() para * Chamado quando o tag terminar. processamento antes do tag, se necessário */ public int doendtag() throws JspException { try { Writer out = pagecontext.getout(); java.util.date = new java.util.date(); out.println(hoje.tostring()); } catch (java.io.ioexception e) { throw new JspException (e); } return Tag.EVAL_PAGE; } } Para este método, pode ser EVAL_PAGE ou SKIP_PAGE 7

Tipos de tags Há vários tipos de custom tags. Cada estratégia utiliza diferentes classes base e métodos 1. Diferenciados por herança: Tags simples: implementam a interface Tag (TagSupport é uma implementação neutra). Tags com corpo que requer processamento: implementam BodyTag (BodyTagSupport é implementação neutra) Diferenciados por outras características Tags que possuem atributos Tags que definem variáveis de scripting fora do seu escopo (requerem classe extra com "Tag Extra Info") Tags que interagem com outros tags 8

Ciclo de vida de objetos Tag Definir atributos chamando métodos setxxx() setpagecontext() setparent() Obter instância do objeto Tag release() Fim SKIP_PAGE dostarttag() SKIP_BODY doendtag() EVAL_BODY_INCLUDE Processa corpo do tag EVAL_PAGE release() Continua Fonte: [6] 9

Ciclo de vida de objetos BodyTag Definir atributos chamando métodos setxxx() setpagecontext() setparent() Obter instância do objeto Tag dostarttag() SKIP_BODY release() Fim EVAL_BODY_BUFFERED SKIP_PAGE Inicializa conteúdo doendtag() SKIP_BODY EVAL_PAGE Processa corpo do tag doafterbody() release() Continua Fonte: [6] EVAL_BODY_BUFFERED 10

Atributos Para definir atributos em um tag é preciso 1. Definir método setxxx() com o nome do atributo 2. Declarar atributo no descritor (TLD) <xyz:uppercase text="abcd" /> public class UpperCaseTag { public String text; public void settext(string text) { this.text = text; } (...) <tag> <name>uppercase</name> (...) <attribute> <name>text</name> <required>true</required> <rtexprvalue>false</rtexprvalue> </attribute> (...) </tag> Os atributos devem setar campos de dados no tag Valores são manipulados dentro dos métodos doxxx(): public int dostarttag() throws JspException { Writer out = pagecontext.getout(); out.println(text.touppercase()); (...) 11

Obtenção do conteúdo do Body O objeto out, do JSP, referencia a instância BodyContent de um tag enquanto processa o corpo BodyContent é subclasse de JspWriter Tag decide se objeto BodyContent deve ser jogado fora ou impresso (na forma atual ou modificada) Exemplo public int doafterbody() throws JspException { BodyContent body = getbodycontent(); String conteudo = body.getstring(); } body.clearbody(); Apaga conteúdo (...) getpreviousout().print(novotexto); Guarda conteúdo do tag Imprime texto na página (e não no body do Tag) 12

Exemplos de Custom Tags Veja cap16/exemplos/taglibs/ Vários diferentes exemplos de custom tags (do livro [6]) Código fonte em taglib/src/taglibdemo/*.java Páginas exemplo em src/*test.jsp (6 exemplos) 1. Configure build.properties, depois, monte o WAR com: > ant build 2. Copie o WAR para o diretório webapps do Tomcat > ant deploy 3. Execute os tags, acessando as páginas via browser: http://localhost:porta/mut/ Veja também cap12/exemplos/hellojsp_2/ Aplicação MVC que usa custom tags 13

Exercício 1. Escreva um custom tag simples <j550:tabela> que receba um String como parâmetro (texto) e imprima o String dentro de uma tabela HTML: O tag <j550:tabela texto="texto Recebido"/> deve produzir <table border="1"><tr><td> Texto Recebido</td></tr></table> 2. Crie mais dois atributos que definam cor-de-fundo e cor-do-texto para a tabela e o texto. 3. Escreva uma segunda versão do tag acima que aceite o texto entre os tags <j550:tabela>texto Recebido</j550:tabela> 14

helder@acm.org argonavis.com.br 15