Rafael Benevides bio photo

Rafael Benevides

In a serious relationship with Software Development

Email Twitter Facebook Google+ LinkedIn Instagram Github Last.fm Youtube


Este post encerra minha rodada para apresentar o Facelets, e motivar as pessoas através da demonstração de suas funcionalidades e vantagens.

Minha idéia para encerrar com chave de ouro é mostrar hoje o conceito de Componentes através do uso de templates. Suponhamos que você queria criar um componente a:inputCPF que já renderize um Label CPF, renderize também um inputText com o maxlenght pré-definido e formate a mascara.

Neste caso, bastará criar “um template” contendo este h:inputText “customizado”. Ex. (arquivo cpf.xhtml):

<!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:h="http://java.sun.com/jsf/html"
  xmlns:ui="http://java.sun.com/jsf/facelets">
  		<!-- JavaScript de Formatação de CPF suprimida -->
      <ui:composition>
      	   CPF: <h:inputText value="${value}" onkeypress="return formataCPF();" maxlength="14" />
      </ui:composition>
</html>

Uma vez criado este pedaço de página, vamos criar o arquivo de definição das tagslibs informando basicamente o “namespace” para as componentes e o nome da tag e a qual página compõe a tag informada. Ex. (arquivo META-INF/cpf.taglib.xml):

<!DOCTYPE facelet-taglib PUBLIC	"-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN"	"facelet-taglib_1_0.dtd">
  <facelet-taglib>	
    <namespace>http://facelets.benevides.com</namespace>
     		<tag>
          		<tag-name>inputCpf</tag-name>
              <source>../cpf.xhtml</source>	
        </tag>
</facelet-taglib>

Feito isto, bastamos agora informar (no web.xml) quais taglibs devem ser carregadas. Ex.:

<context-param>	
  <param-name>facelets.LIBRARIES</param-name>
  <param-value>/META-INF/cpf.taglib.xml</param-value>
</context-param>

Duas informações importantes:

  1. Se houver mais de uma arquivo xml com a definição das taglibs, você pode separa-los por vírgula
  2. Caso o arquivo xml esteja em outro jar, o xml deve estar obrigatoriamente dentro da pasta META-INF

Pronto, agora sua tag está pronta para ser utilizada. Lembre-se de adicionar o namespace da sua tag na sua página xhtml previamente

<!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:f="http://java.sun.com/jsf/core"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:ui="http://java.sun.com/jsf/facelets"
  xmlns:a="http://facelets.benevides.com">      
  <ui:composition template="/template.xhtml" >
  <ui:define name="Titulo" >Titulo 1</ui:define>
    <ui:define name="header" >
        <ui:debug  hotkey="d"/>
        <h:form>
              Nome: <h:inputText value="#{bean.nome}" /><</span> a:inputCpf  / >
              <input type="submit" jsfc="h:commandButton" value="Enviar" action="#{bean.acao}"/ >
          </h:form>
      </ui:define>
    </ui:composition >
</html>

Vejam que isto é muito poderoso! Você pode também criar funções, validadores, conversores, usar e abusar do jstl para que seus componentes tenham alguma inteligência.

Agora tudo isto não será fácilmente “engulido” pela equipe de multimedia, se esta não se sentir a vontade para trabalhar, para isto além do Exadel, pode-se usar também o JSF ToolBox .

Esperava conseguir abordar todas as funcionalidades do Facelets, mas para isto, o correto seria escrever um artigo (espero fazer isto em breve). Entretanto espero que estes últimos posts tenham despertado os leitores para esta tecnologia e desejo que se aprofundem nas documentações diposníveis no site do Facelets.