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



Documentos relacionados
JavaServer Faces. Parte 2

DWR DIRECTED WEB REMOTING

Relatório referente a compreensão da programação JSP. Realizado do dia de 22 abril de 2010 a 03 de maio de 2010.

PADRÃO PARA ENVIO DE . Versão 1.0

J550 Tag Libraries e JSTL

Web Design Aula 11: XHTML

Tutorial Financeiro WEB. Spring Security

Java para WEB. Servlets

CRIAÇÃO DE MAPAS TEMÁTICOS COM ALOV MAP

Introdução à Tecnologia Web HTML HyperText Markup Language XHTML extensible HyperText Markup Language Estrutura Básica do Documento HTML

FACULDADE DE TECNOLOGIA SENAC GOIÁS PROGRAMAÇÃO PARA INTERNET TUTORIAL DE APLICAÇÃO JSF DESENVOLVIDO COM A FERRAMENTA ECLIPSE LUNA

Listando, gravando, alterando e excluindo registro do banco de dados com JSP

JSF Facelets. Como Facelets muda a forma de desenvolver com JSF

Introdução a Servlets e JSP. Prof. Samuel Martins samuellunamartins at gmail dot com Faculdade São Miguel

Exercícios de Revisão Java Básico

UNIDADE III JAVA SERVER PAGES

Introdução a JavaServer Pages. Curso de Tecnologia em Análise e Desenvolvimento de Sistemas Desenvolvimento de sistemas web

PÓS-GRADUAÇÃO EM MATEMÁTICA COMPUTACIONAL INFORMÁTICA INSTRUMENTAL Aula 06: Introdução Linguagem HTML

Desenvolvimento em Ambiente Web. HTML - Introdução

Vejamos um exemplo. Vamos supor que queiramos montar uma tabela 3X2, ou seja de 3 colunas por 2 linhas, o código HTML para isso é :

Java para Desenvolvimento Web

HTML Página 1. Índice

Minha primeira aplicação utilizando Java Server Faces + Glassfish

Introdução. Servlet. Ciclo Vida. Servlet. Exemplos. Prof. Enzo Seraphim

Programação Web. Professor: Diego Oliveira. Conteúdo 02: JSP e Servlets

Criando uma agenda simples com NetBeans 6.5

LINGUAGEM DE PROGRAMAÇÃO WEB

Vejamos um exemplo de uso da API. Como vimos, os agentes imobiliários de nosso aplicativo podem ingressar e visualizar as propriedades que possuem em

Módulo 02 Programação Orientada a Objetos. Última atualização: 07/06/2010

Enviado dados para o PHP através de formulário

Manual de Utilização da Biblioteca VisPublica

Capítulo 1 - Java EE 6 por alto - 1

Desenvolvimento de aplicações Web. Java Server Pages

Para o envio de s pelo PHP é necessário seguir a seguinte sintaxe:

Desenvolvendo Portlets utilizando JSF, Ajax, Richfaces. Gustavo Lira Consultor 4Linux

Programação WEB II. Conhecendo o PHP. Prof: Kelly E. Medeiros Bacharel em Sistema de Informação. Módulo III

Cobrança Bancária. Contas / Manutenção.

JSP: JAVA SERVER PAGES

Introdução. <facelets> Templates. Configurações. Componentes. Prof. Enzo Seraphim

Use a Cabeça! FREEMAN, Eric e Elisabeth. HTML com CSS e XHTML BASHMAN, Brian / SIERRA Kathy / BATES, Bert. Servlets & JSP

WINDOWS EXPLORER. O organizador

Tutorial de Computação Introdução a Programação Gráfica em Java para MEC1100 v

Desenvolvimento Web com Framework Demoiselle versão 1.0

Aula de JavaScript 05/03/10

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

PROGRAMAÇÃO ORIENTADA A OBJETO EM PHP

INFORMÁTICA. Prof.: MARCIO HOLLWEG CONCEITOS DE INTERNET E INTRANET

JSP: JAVA SERVER PAGES

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

Layouts de páginas com HTML e CSS

Universidade da Beira Interior

Implementando uma Classe e Criando Objetos a partir dela

Desenvolvimento de aplicação web com framework JavaServer Faces e Hibernate

JSP (Java Server Pages)

Guia para Iniciantes do WebWork

Computação II Orientação a Objetos

WebWork 2. João Carlos Pinheiro.

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

Curso Java Starter. 1

Folhas de estilo. Jomi Fred Hübner (XSL e XPath) FURB / DSC

extensible Markup Language (XML) XML é uma linguagem de anotação. XML utiliza tags para descrever informação.

- Aulas 57, 58, 59 e 60 - Técnicas de programação. Funções

Linguagem de. Aula 06. Profa Cristiane Koehler

Conteúdo.

Como criar um EJB. Criando um projeto EJB com um cliente WEB no Eclipse

Prática Sobre Servlets e JSP

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

Como o FIT funciona. FIT: Framework for Integrated Tests FIT. Dados de testes. Programa. Fixtures. classes. Resultados de testes

PLATAFORMA DE DESENVOLVIMENTO PINHÃO PARANÁ PADRÃO PARA ORGANIZAÇÃO FÍSICA DE ARQUIVOS EM APLICAÇÕES JAVA WEB

Autenticação e Autorização

TUTORIAL DE INTRODUÇÃO AO CEWOLF

Introdução ao HTML Utilizando frames Hospedando seu site na WEB

Para desenvolver a atividade a atividade desta aula utilizaremos o ambiente de desenvolvimento integrado NetBeans.

INTRODUÇÃO 12. DOCUMENTAÇÃO INTRODUÇÃO INTRODUÇÃO

NAVEGG GUIDE. Publisher: Como fazer retargeting para um cliente usando a funcionalidade Custom

PROJETO FRAMEWORK - CELEPAR PAGINAÇÃO DE DADOS EM APLICAÇÕES JAVA PARA INTERNET

O sistema SCS 34. getreceptaclesbyname(in NameList names): Obtém uma lista de descritores

Atividade JSP com Banco de Dados

Prof.: Melba Lima Gorza Aula Introdutória de HTML. Componentes do HTML. Estrutura de um documento XHTML

INTRODUÇÃO À TECNOLOGIA SERVLETS

Java Server Faces 2.0 Rich Faces 4.0

Programação para Internet II

Vamos criar uma nova Página chamada Serviços. Clique em Adicionar Nova.

AJAX Reverso. Comet com DWR. baseado em

Definindo um Layout de Website sem Tabelas Vou apresentar nesse post como fazer o código do layout de um website sem utilizar

Herança. Algoritmos e Programação II. Aula 5 Herança

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

Desenvolvimento Web TCC Turma A-1

Java II. Sérgio Luiz Ruivace Cerqueira

Criando uma Maquina Virtual EC2

Carregando dados do Banco de Dados MySQL através de uma tag SELECT

1 Criando um aplicativo visual em Java

Capítulo 8. Introdução UML

UNIDADE II JAVA SERVLETS

Aula 12: Funções. Pré-requisitos: Todas as aulas anteriores deste módulo. 1. Aproveitando Códigos no Programa

Programação Na Web. Servlets: Como usar as Servlets. Agenda. Template genérico para criar Servlets Servlet 2.4 API

Transcrição:

Tutorial para criação de componentes JSF Facelets Por Érico GR 07/08/2007 Nível: Intermediário Este tutorial tem como objetivo criar um simples componente que renderiza uma tag label utilizando recursos do framework facelets, mas nada impede que componentes mais complexos sejam criados. Tentei simplificar ao máximo o exemplo, criando até um mapa de relacionamento entre os arquivos de configuração e o código Java. Pressuponho que o leitor que deseja seguir este tutorial já tenha conhecimento básico sobre java e facelets. Para mais informações, consulte as referências no final deste documento. Neste exemplo vamos criar um componente chamado FirstJsfTest que renderiza um simples label. Exemplo: <label>teste 123</label> Premissas 1. JDK 1.5 ou superior 2. Biblioteca JSF 1.2 (aqui utilizamos JSF1.2_04) 3. Seu projeto já deve estar configurado para utilizar a combinação de JSF + Facelets Criação do componente 1. Criar uma classe que estenda UIComponent 2. Programar métodos para salvar e restaurar o estado do componente 3. Criar método que retorne a família do componente 4. Criar uma classe que estenda UIComponentELTag 5. Configurar as propriedades que o componente JSF utilizará 6. Programar métodos para retornar o tipo de componente e renderizador utilizado 7. Programar um renderizador 8. Criar um arquivo.tld (Descritor de biblioteca de tags) 9. Registre o componente no faces-config.xml 10. Criar um arquivo de configuração de biblioteca facelets e registra-lo 11. Usando o componente 12. Relacionamento entre código java e os descritivos XML 1

13. Referências 1. Crie uma classe que estenda UIComponent Para começar, vamos criar a classe UIFirstJsfComponent que estende a classe UIOutput (que é subclasse de UIComponent) e criaremos também os atributos do componente. [UIFirstJsfComponent.java] package net.sf.quizonline.tags; import javax.faces.component.uioutput; import javax.faces.context.facescontext; public class UIFirstJsfComponent extends UIOutput { private String m_name; public UIFirstJsfComponent() { public String getname() { return m_name; public void setname(string name) { m_name = name; 2. Programar métodos para salvar e restaurar o estado do componente Abaixo está o trecho de código que fica responsável por salvar o estado do componente. [UIFirstJsfComponent.java] @Override public Object savestate(facescontext facescontext) { Object[] values = new Object[2]; values[0] = super.savestate(facescontext); values[1] = getname(); return (Object)values; @Override public void restorestate(facescontext facescontext, Object state) { Object[] values = (Object[])state; super.restorestate(facescontext, values[0]); setname((string)values[1]); 2

3. Retornar a família do componente Precisamos do método getfamily() para retornar a família do componente. O retorno deste método será usado posteriormente para registrar o renderizador no arquivo de configuração do Jsf. Podemos retornar COMPONENT_FAMILY que é uma constante com o valor javax.faces.output. [UIFirstJsfComponent.java] public String getfamily() { return COMPONENT_FAMILY; 4. Cria uma classe que estenda UIComponentELTag Nos passos anteriores, o componente foi criado. Agora precisamos definir a tag (marcação que ficará na página que estamos criando) que fará uma ponte entre o Jsp e o Jsf. No trecho de código abaixo, está também a propriedade name que será utilizada em nossa tag para passar valor ao componente com propriedade de mesmo nome. Depois mapearemos a tag através do arquivo de configuração de extensão.tld (tag library descriptor). [FirstJsfTag.java] package net.sf.quizonline.tags; import javax.faces.webapp.uicomponenteltag; import javax.faces.component.uicomponent; public class FirstJsfTag extends UIComponentELTag { private String m_name; public FirstJsfTag() { public String getname() { return m_name; public void setname(string name) { this.m_name = name; 5. Configurar as propriedades que o componente JSF utilizará Vamos armazenar o valor configurado para a tag no componente que criamos como mostra o código abaixo: [FirstJsfTag.java] 3

@Override protected void setproperties(uicomponent component) { super.setproperties(component); ((UIFirstJsfComponent)component).setName(getName()); 6. Programar métodos para retornar o tipo de componente e renderizador utilizado O retorno deste método será utilizado nos arquivos de configuração do Jsf e Facelets. [FirstJsfTag.java] public String getcomponenttype() { return "net.sf.quizonline.htmlfirstjsftag"; public String getrenderertype() { return "net.sf.quizonline.firstjsftag"; 7. Programar um renderizador O renderizador escreverá a saída, no nosso caso codificação em HTML. Esta classe estende Renderer e provê uma série de métodos interessantes que podem ser explorados pelo programador, mas que não estão no escopo deste artigo. Este renderizador apenas escreve na página um label com o valor definido na propriedade name. A saída é esta: <label>valor qualquer</label> [FirstJsfRenderer.java] package net.sf.quizonline.tags; import java.io.ioexception; import javax.faces.component.uicomponent; import javax.faces.context.facescontext; import javax.faces.context.responsewriter; import javax.faces.render.renderer; public class FirstJsfRenderer extends Renderer { @Override public void encodebegin(facescontext context, UIComponent component)throws IOException { UIFirstJsfComponent firstjsfcomponent = (UIFirstJsfComponent) component; ResponseWriter writer = context.getresponsewriter(); writer.startelement("label", component); writer.write(firstjsfcomponent.getname()); 4

writer.endelement("label"); writer.flush(); 8. Criar um arquivo.tld Depois de ter criado o componente, temos que criar seu descritor, o arquivo tld (Tag Library Descriptor) chamado firstjsftag.tld (para este exemplo). Normalmente este arquivo fica na pasta da sua aplicação web em /WEB-INF/taglib. Exemplo: /WEB-INF/taglib/firstJsfTag.tld [firstjsftag.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/j2ee/dtds/web-jsptaglibrary_1_2.dtd"> <taglib> <tlib-version>1.0</tlib-version> <jsp-version>2.0</jsp-version> <short-name>firstjsftag</short-name> <uri>http://net.sf.quizonline/component/test/tags</uri> <description>teste de taglibs jsf</description> <tag> <name>firstjsftag</name> <tag-class>net.sf.quizonline.tags.firstjsftag</tag-class> <attribute> <name>name</name> <required>true</required> </attribute> </tag> </taglib> 9. Registre o componente no faces-config.xml É necessário registrar o componente no arquivo de configuração do Jsf faces-config.xml. Normalmente este arquivo fica na pasta da sua aplicação web em /WEB-INF. Exemplo: /WEB-INF/faces-config.xml [faces-config.xml] <?xml version="1.0" encoding="utf-8"?> <faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"> <!-- Custom Tags --> <!-- Componente de UI do JSF para teste --> <component> <component-type>net.sf.quizonline.htmlfirstjsftag</component- 5

type> <component-class> net.sf.quizonline.tags.uifirstjsfcomponent </component-class> </component> <render-kit> <renderer> <component-family>javax.faces.output</component-family> <renderer-type>net.sf.quizonline.firstjsftag</renderertype> <renderer-class> net.sf.quizonline.tags.firstjsfrenderer </renderer-class> </renderer> </render-kit> <!-- IMPORTANTE: foram ocultas outras configuração não relevantes! --> </faces-config> 10. Criar um arquivo de configuração de biblioteca facelets e registrá-lo Agora precisamos configurar o facelets para utilizar o componente Jsf criado. Para criar essa ponte entre os dois, declaramos em um arquivo de configuração o nome do componente, seu tipo e o tipo do renderizador. Normalmente este arquivo fica na pasta da sua aplicação web em /WEB-INF/taglib. Exemplo: /WEB-INF/taglib/firstJsfTag.taglib.xml [firstjsftag.taglib.xml] <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE facelet-taglib PUBLIC "-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN" "facelet-taglib_1_0.dtd" > <facelet-taglib> <namespace>http://quizonline.sf.net/firstjsftag</namespace> <tag> <tag-name>firstjsftag</tag-name> <component> <component-type> net.sf.quizonline.htmlfirstjsftag </component-type> <renderer-type> net.sf.quizonline.firstjsftag </renderer-type> </component> </tag> </facelet-taglib> Note que os tipos declarados neste arquivo são os mesmos retornados pelos métodos presentes na classe que estende UIComponentELTag (getcomponenttype() e getrenderertype()). É preciso também registrar este arquivo como uma biblioteca nos parâmetros de contexto do facelets. Caso exista mais de uma biblioteca, podemos separá-las com ; ponto e virgula. 6

Normalmente este arquivo fica na pasta da sua aplicação web em /WEB-INF. Exemplo: /WEB-INF/web.xml [web.xml] <?xml version="1.0" encoding="utf-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <context-param> <param-name>facelets.libraries</param-name> <param-value> /WEB-INF/taglib/firstJsfTag.taglib.xml </param-value> </context-param> </web-app> 11. Usando o componente Agora podemos usar o componente nas páginas xhtml. Abaixo segue o exemplo de uma página usando o componente. [teste.xhtml] <?xml version='1.0' encoding='iso-8859-1'?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:c="http://java.sun.com/jstl/core" xmlns:fjt="http://quizonline.sf.net/firstjsftag"> <ui:composition template="/pages/public/template/default.xhtml"> <ui:define name="pagetitle"> <h:outputtext value="pagina de teste 3" /> </ui:define> <ui:define name="corpo"> <f:view> <fjt:firstjsftag name="teste123"/> </f:view> </ui:define> </ui:composition> </html> 12. Relacionamento entre código Java e os descritivos XML Abaixo temos uma figura que exibe trechos de código e de arquivos XML e como eles precisam estar relacionados para a composição do componente desenvolvido. 7

Mapa de referência de arquivos de configuração Note que a maioria dos arquivos não estão completos, deixei somente a parte interessante para visualizarmos o relacionamento entre eles. Por exemplo, o arquivo FirstJsfTag.java não tem a definição de pacotes, as importações, a declaração de classes, etc. 13. Referências Abaixo estão alguns sites que serviram de referência para montar este documento. Jdk http://www.sun.com/java facelets http://facelets.java.net Tomcat http://tomcat.apache.org JSF 1.2 (Sun) https://glassfish.java.net JSF Central http://www.jsfcentral.com/ Introdução ao facelets http://www.jsfcentral.com/articles/facelets_1.html 8