JSF - Tag Personalizada
O JSF fornece ao desenvolvedor um recurso poderoso para definir suas próprias tags personalizadas, que podem ser usadas para renderizar conteúdos personalizados.
Definir uma tag personalizada no JSF é um processo de três etapas.
Degrau | Descrição |
---|---|
1a | Crie um arquivo xhtml e defina o conteúdo nele usando ui:composition etiqueta |
1b | Crie um descritor de biblioteca de tags (arquivo .taglib.xml) e declare a tag personalizada acima nele. |
1c | Registre o descritor de tag libray em web.xml |
Etapa 1a: Definir o conteúdo da tag personalizada: buttonPanel.xhtml
<h:body>
<ui:composition>
<h:commandButton type = "submit" value = "#{okLabel}" />
<h:commandButton type = "reset" value = "#{cancelLabel}" />
</ui:composition>
</h:body>
Etapa 1b: Definir uma biblioteca de tags: tutorialspoint.taglib.xml
Como o nome menciona, uma biblioteca de tags é uma biblioteca de tags. A tabela a seguir descreve atributos importantes de uma biblioteca de tags.
S.Não | Nó e descrição |
---|---|
1 | facelet-taglib Contém todas as tags. |
2 | namespace Namespace da biblioteca de tags e deve ser exclusivo. |
3 | tag Contém uma única tag |
4 | tag-name Nome da tag |
5 | source Implementação de tag |
<facelet-taglib>
<namespace>http://tutorialspoint.com/facelets</namespace>
<tag>
<tag-name>buttonPanel</tag-name>
<source>com/tutorialspoint/buttonPanel.xhtml</source>
</tag>
</facelet-taglib>
Etapa 1c: Registre a biblioteca de tags: web.xml
<context-param>
<param-name>javax.faces.FACELETS_LIBRARIES</param-name>
<param-value>/WEB-INF/tutorialspoint.taglib.xml</param-value>
</context-param>
Usar uma tag customizada no JSF é um processo de duas etapas.
Degrau | Descrição |
---|---|
2a | Crie um arquivo xhtml e use o namespace da biblioteca de tags personalizadas |
2b | Use a tag personalizada como tags JSF normais |
Etapa 2a: use o namespace personalizado: home.xhtml
<html xmlns = "http://www.w3.org/1999/xhtml"
xmlns:h = "http://java.sun.com/jsf/html"
xmlns:ui = "http://java.sun.com/jsf/facelets">
xmlns:tp = "http://tutorialspoint.com/facelets">
Etapa 2b: usar tag personalizada: home.xhtml
<h:body>
<tp:buttonPanel okLabel = "Ok" cancelLabel = "Cancel" />
</h:body>
Aplicação de exemplo
Vamos criar um aplicativo JSF de teste para testar as tags de modelo no JSF.
Degrau | Descrição |
---|---|
1 | Crie um projeto com o nome helloworld sob um pacote com.tutorialspoint.test conforme explicado no capítulo JSF - Primeira Aplicação . |
2 | Crie a pasta com no diretório WEB-INF . |
3 | Crie a pasta tutorialspoint no diretório WEB-INF> com . |
4 | Crie o arquivo buttonPanel.xhtml na pasta WEB-INF> com> tutorialspoint . Modifique-o conforme explicado abaixo. |
5 | Crie o arquivo tutorialspoint.taglib.xml na pasta WEB-INF . Modifique-o conforme explicado abaixo. |
6 | Modifique o arquivo web.xml na pasta WEB-INF conforme explicado abaixo. |
7 | Modifique home.xhtml conforme explicado abaixo. Mantenha o resto dos arquivos inalterados. |
8 | Compile e execute o aplicativo para ter certeza de que a lógica de negócios está funcionando de acordo com os requisitos. |
9 | Por fim, construa o aplicativo na forma de um arquivo war e implante-o no Apache Tomcat Webserver. |
10 | Inicie seu aplicativo da web usando o URL apropriado, conforme explicado a seguir na última etapa. |
buttonPanel.xhtml
<?xml version = "1.0" encoding = "UTF-8"?>
<!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">
<h:body>
<ui:composition>
<h:commandButton type = "submit" value = "#{okLabel}" />
<h:commandButton type = "reset" value = "#{cancelLabel}" />
</ui:composition>
</h:body>
</html>
tutorialspoint.taglib.xml
<?xml version = "1.0"?>
<!DOCTYPE facelet-taglib PUBLIC
"-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN"
"http://java.sun.com/dtd/facelet-taglib_1_0.dtd">
<facelet-taglib>
<namespace>http://tutorialspoint.com/facelets</namespace>
<tag>
<tag-name>buttonPanel</tag-name>
<source>com/tutorialspoint/buttonPanel.xhtml</source>
</tag>
</facelet-taglib>
web.xml
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<context-param>
<param-name>javax.faces.FACELETS_LIBRARIES</param-name>
<param-value>/WEB-INF/tutorialspoint.taglib.xml</param-value>
</context-param>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
</web-app>
home.xhtml
<?xml version = "1.0" encoding = "UTF-8"?>
<!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"
xmlns:tp = "http://tutorialspoint.com/facelets">
<h:head>
<title>JSF tutorial</title>
</h:head>
<h:body>
<h1>Custom Tags Example</h1>
<tp:buttonPanel okLabel = "Ok" cancelLabel = "Cancel" />
</h:body>
</html>
Assim que você estiver pronto com todas as mudanças feitas, vamos compilar e rodar a aplicação como fizemos no capítulo JSF - Primeira Aplicação. Se tudo estiver bem com sua aplicação, isso produzirá o seguinte resultado.