O JSF apresenta nativo o recurso de templates, apenas criando um arquivo para template os outros xhtml apenas precisam definir o que querem utilizar dos templates.
template.xhtml
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:p="http://primefaces.org/ui"> <h:head> <title><h:outputText value="Template JSF" /></title> <meta content='text/html; charset=UTF-8' http-equiv="Content-Type" /> </h:head> <h:body> <ui:insert name="conteudo" /> </h:body> </html>
ui:insert : Define que naquela área do template será incluído algum conteúdo.
home.xhtml
<ui:composition 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:p="http://primefaces.org/ui" template="/pages/inc/template.xhtml"> <ui:define name="conteudo"> <p:panel header="Home"> <h1>Welcome</h1> </p:panel> </ui:define> </ui:composition>
- ui:composition : Define que o xhtml é uma composição do template definido no atributo template ex : template=”/pages/inc/template.xhtml”;
- ui:define : Define o conteúdo que será inserido no local reservado do template
Observação
O Nome definido no ui:insert deve ser o mesmo que no ui:define.
O Nome definido no ui:insert deve ser o mesmo que no ui:define.