Esse artigo faz parte da revista Java Magazine edição 61. Clique aqui para ler todos os artigos desta edição

AN style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: red; FONT-FAMILY: Verdana; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial">

Roman">112.0pt 140.0pt 168.0pt 196.0pt 224.0pt 252.0pt 280.0pt 308.0pt 336.0pt" align=left>De que se trata o artigo:

O Facelets é um framework para desenvolver template de telas em conjunto com o JavaServer Faces. Este artigo apresenta como instalar, configurar e usar o Facelets numa aplicação Web com JSF.

 

Para que serve:

Este framework será incorporado na especificação do JSF 2.0 com algumas modificações para se tornar o mecanismo padrão para descrever uma tela Web com JSF. Ele permitirá a definição de templates de telas para promover o reuso e facilitar a manutenção do layout e padrão visual das interfaces Web.

 

Em que situação o tema é útil:

Como o Facelets se tornará uma tecnologia padrão e mantida pelo JCP em conjunto com o JSF, será o mecanismo que substituirá o JSP no processo de definição de uma tela Web. O Facelets no JSF permitirá descrever a camada de apresentação de uma aplicação Web. Apesar da nova especificação JSF ainda suportar JSP, o Facelets será considerado o mecanismo preferencial que todo desenvolvedor deverá conhecer para conseguir usar os novos recursos do JSF 2.0.

 

Criando templates de telas no JSF – Resumo DevMan:

O Facelets é um framework para suporte ao desenvolvimento de telas na Web com o JavaServer Faces (JSF), assim como o Tiles é para o Struts e os Tag Files são para o JSP. Esta tecnologia será incorporada à especificação JSF 2.0 para substituir o JSP como mecanismo padrão para gerar a camada view de uma aplicação Web. Além disso, o Facelets permitirá a definição de templates de telas e a implementação de novos componentes visuais sem a necessidade de escrever códigos Java.

Introdução

O Facelets é uma tecnologia de código aberto e uso livre, sob a licença CDDL 1.0, que estabelece uma linguagem de templates para suportar a criação da árvore de componentes das telas JSF. Esta tecnologia permite o reuso de padrões de telas e a composição de componentes JSF para a formação de novos componentes.

JavaServer Faces (JSF) é uma tecnologia padronizada e mantida pelo Java Community Process (JCP) para o desenvolvimento de aplicações que permite o uso de um modelo de componentes para definição e renderização de uma tela de sistema na Web. Como o JSF permite o desenvolvimento baseado no padrão de projeto MVC, o Facelets é a parte 'View' deste padrão a ser incorporada na especificação para facilitar o desenvolvimento de telas Web com JSF. Isto tornará o Facelets o mecanismo padrão para desenvolvimento de aplicações Web e não mais JSP, que continuará a ser uma alternativa possível, mas não preferencial. Veja a entrevista com Ed Burns, líder da especificação do JSF 2.0 no JCP, no quadro anexo com comentários sobre como o Facelets influenciará na nova especificação.

Neste artigo, faremos uma “introdução completa” ao Facelets: discutindo tecnicamente seus recursos, construindo uma aplicação simples e mostrando como utilizar a tecnologia nos principais IDEs.

O que são templates

Durante o desenvolvimento de uma aplicação web com diversas telas, percebe-se que várias destas têm uma estrutura semelhante. Para promover o reuso desta estrutura comum e facilitar a futura manutenção do padrão visual deste sistema, são utilizados um ou mais modelos de páginas (templates). Um template define um desenho padrão para as telas e áreas substituíveis para a troca de conteúdo durante a renderização da interface para o usuário.

Existem diversas maneiras de realizar a definição de templates e a composição das diversas telas do sistema com estes templates.

Templates em aplicações Web tradicionais: JSP/Servlets

Em aplicações Web tradicionais este problema é resolvido criando uma página JSP que inclui outras páginas JSP que representam cada parte que compõe a página, aumentando o reuso e facilitando a manutenção das páginas.

Templates em aplicações Struts

Em aplicações Struts, este problema foi resolvido muito eficientemente com o framework Tiles, criado como um plugin para o Struts.

Templates em aplicações JSF

Ao tentar aplicar as lições aprendidas no desenvolvimento de aplicações Web com JSP/Servlets e Struts à JSF, alguns desafios foram encontrados:

·         Inclusão de páginas dificultada devido ao Content Interweaving Problem, que causava o embaralhamento dos componentes da página apresentada pelo browser quando as páginas incluídas utilizavam componentes JSF aninhados em elementos HTML. Veja o artigo “Improving JSF by dumping JSP” de Hans Bergsten;

·         Incompatibilidade de utilização do framework Tiles em aplicações baseadas em MyFaces e JSF RI, tornando praticamente inviável sua utilização com a implementação de referência JSF;

·         Dificuldade na criação de componentes visuais compostos por outros componentes visuais.

 

Foi neste cenário que o framework Facelets nasceu. Um mecanismo de template baseado em XML, compatível com qualquer implementação de JSF (criado especificamente para JSF), permitindo mesclar HTML e JSF indiscriminadamente. Diferentemente das páginas JSP que foram inventadas muito antes.

O desenvolvedor Jacob Hookom criou um projeto open source e o batizou de Facelets. Este projeto tem a intenção de resolver as limitações citadas e prover uma tecnologia alternativa ao JSP, atendendo às necessidades especificas do JSF. Veja no quadro anexo uma entrevista com este desenvolvedor que nos conta qual foi a sua principal motivação ao criar o Facelets.

Instalando o Facelets numa aplicação Web

O download do Facelets pode ser realizado a partir da página do projeto, hospedada no site java.net com a seguinte URL: https://facelets.dev.java.net/.

Um arquivo zip com uma versão estável pode ser obtido a partir da página de download. Este arquivo conterá o código fonte, a documentação em formato Javadoc da API, uma documentação texto para o desenvolvedor, aplicações Web de exemplo e os JARs necessários para usar o Facelets.

Após o download, será necessário criar uma aplicação Web e incorporar os JARs necessários para utilizá-lo. O Facelets deve ser usado numa aplicação com suporte ao JSF 1.1 ou 1.2. Esta aplicação deve ter instalado uma implementação de JSF como, por exemplo, o JSF-RI ou o MyFaces.

Apresentamos neste artigo um passo a passo para criar uma aplicação JSF com Facelets no Eclipse ou NetBeans utilizando JSF 1.2. Para isso, o arquivo jsf-facelets.jar deve ser adicionado ao diretório /WEB-INF/lib da aplicação Web.

A aplicação Web também deve conter no classpath a JSF API e uma implementação de JSF (JSF RI ou MyFaces). Então, os seguintes JARs devem estar presentes: jsf-api.jar, jsf-impl.jar, commons-beanutils.jar, commons-collections.jar, commons-digester.jar e commons-logging.jar.

Configurando a aplicação Web e o JSF com o Facelets

O seguinte fragmento de configuração deve ser adicionado no deployment descriptor (web.xml) da aplicação:

 

  <context-param>

    <param-name>javax.faces.DEFAULT_SUFFIX</param-name>

    <param-value>.xhtml</param-value>

  </context-param>

 

Este parâmetro de configuração indicará para a implementação de JSF que os arquivos que definirão as telas terão a extensão xhtml e não mais jsp.

Consulte outras opções de configuração nos quadros: “Outras opções de configuração no Deployment Descriptor”, “Protegendo os arquivos XHTML” e “Configurando Facelets em aplicações que utilizam outros Frameworks”.

A Listagem 1 apresenta uma versão completa do arquivo web.xml com as configurações de uma aplicação Web baseada na implementação de referência do JSF e no Facelets. De acordo com estas configurações, as telas JSF serão renderizadas a partir de arquivos texto baseados em XHTML e com extensão xhtml. E o ciclo de vida do JSF será iniciado a partir de URLs com a extensão .jsf. Por exemplo, a seguinte URL iniciará o ciclo de vida através do FacesServlet: http://localhost:8080/<contexto>/telaExemplo.jsf, onde o arquivo telaExemplo.xhtml deve existir no diretório raiz ou no arquivo WAR da aplicação Web.

O Facelets é integrado ao JSF através da substituição do componente padrão do JSF, chamado ViewHandler, por outro chamado FaceletViewHandler. Este componente será responsável pela criação da árvore de objetos que representa a tela JSF a partir de arquivos XHTML e não mais a partir de JSP.

 

Listagem 1. Deployment Descriptor de uma aplicação Web baseada no JSF-RI e Facelets

<?xml version="1.0" encoding="UTF-8"?>

 

<web-app version="2.5"

         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-app_2_5.xsd">

 

    <context-param>

        <param-name>javax.faces.DEFAULT_SUFFIX</param-name>

        <param-value>.xhtml</param-value>

    </context-param>

 

    <context-param>

        <param-name>facelets.DEVELOPMENT</param-name>

        <param-value>true</param-value>

    </context-param>

 

    <context-param>

        <param-name>facelets.REFRESH_PERIOD</param-name>

        <param-value>10</param-value>

    </context-param>

 

    <context-param>

        <param-name>facelets.SKIP_COMMENTS</param-name>

        <param-value>true</param-value>

    </context-param>

 

    <servlet>

        <servlet-name>Faces Servlet</servlet-name>

        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>

...

Quer ler esse conteúdo completo? Tenha acesso completo