Uma maneira de deixar um xhtml reutilizável entre projetos java é utilizando taglib, assim tornando o xhtml em um component facelet que pode ser reaproveitado.
Criação da taglib
Criar um projeto quick-start do maven para gerar um taglib.jar e ser adicionado nas dependências dos projetos para a utilização o xhtml compartilhado.
Console/terminal
mvn archetype:generate -DgroupId=br.com.emmanuelneri -DartifactId=taglib -DarchetypeArtifactId=maven-archetype-quickstart
Adicionar a dependencia do jsf-facelets para criação de componentes facelets.
taglib/pom.xml
<dependency> <groupId>com.sun.facelets</groupId> <artifactId>jsf-facelets</artifactId> <version>1.1.11</version> </dependency>
Dentro da pasta resources/META-INF criar um arquivo bar.taglib.xml, que é o arquivo de configuração da taglib.
taglib/src/main/resources/META-INF/bar.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>https://emmanuelneri.com.br/commons-layout</namespace> <tag> <tag-name>topBar</tag-name> <source>components/topBar.xhtml</source> </tag> </facelet-taglib>
- namespace: url de acesso a taglib;
- tag: cada tag não é um componente;
- tag-name: tag que será referenciada no xhtml;
- source: localização do que será chamado.
Ainda dentro da pasta resources/META-INF criar uma pasta components para organizar os xhtmls que serão chamados na taglib.
Na pasta components criar o arquivo barTop.xhtml, que será o arquivo o xhtml chamado pela taglib.
taglib/src/main/resources/META-INF/componets/barTop.xhtml
<jsp:root version="2.0" xmlns:c="http://java.sun.com/jstl/core" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns="http://www.w3.org/1999/xhtml"> <ui:component> <h1>Top Bar</h1> </ui:component> </jsp:root>
O conteudo a ser apresentado deve estar dentro da tag ui:component.
Utilização
Adicionar a taglib na dependencia de um projeto web.
web/pom.xml
<dependency> <groupId>br.com.emmanuelneri</groupId> <artifactId>taglib</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>
E por fim utilizar nos xhtml necessários.
web/webapp/index.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:commons-layout="https://emmanuelneri.com.br/commons-layout"> <commons-layout:topBar " /> <html/>
Para que o outro projeto encontre a taglib, o arquivo taglib.jar deve estar dentro do webapp/WEB-INF/lib