Vistas
Vamos con las vistas creamos en src/main/webapp el archivo plantilla.xhtml
<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>
</h:head>
<h:body>
<ui:insert name="header">
<ui:include src="encabezado.xhtml"></ui:include>
</ui:insert>
<ui:insert name="content">
<ui:include src="contenido.xhtml"></ui:include>
</ui:insert>
</h:body>
</html>
En el mismo directorio creamos la clase encabezado.xhtml
<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>
</h:head>
<h:body>
<ui:composition>
<div class="card">
<h:form>
<p:growl id="messages"/>
<p:menubar>
<p:submenu label="Manager Activity" icon="pi pi-fw pi-file">
<p:menuitem value="#{msn['encabezado.registrar_actividades']}" icon="pi pi-fw pi-pencil" />
</p:submenu>
<p:menuitem value="#{msn['encabezado.salir']}" action="#{loginView.logout()}" icon="pi pi-fw pi-power-off"/>
</p:menubar>
</h:form>
</div>
</ui:composition>
</h:body>
</html>
Creamos el archivo contenido.xhtml
<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>
</h:head>
<h:body>
<ui:composition>
<h:form>
<p:panel header="Manager Activity" footer="Tutosoftware">
<h1><h:outputText value="#{msn['contenido.saludo']}" /></h1>
</p:panel>
</h:form>
</ui:composition>
</h:body>
</html>
Realizamos la vista login.xhtml
<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>
</h:head>
<h:body>
<div style="margin:0 auto;width:70%">
<ui:composition template="plantilla.xhtml" >
<ui:define name="header">
<h:form>
<div class="field col-12 md:col-4">
<h:outputText value="#{msn['login.idioma']}" />
<h:selectOneMenu value="#{idiomaView.codigoIdioma}" onchange="submit()"
valueChangeListener="#{idiomaView.doCambioIdiomaConLista}">
<f:selectItems value="#{idiomaView.listaIdiomas}" />
</h:selectOneMenu>
</div>
</h:form>
<h1><h:outputText value="#{msn['login.saludo']}" /></h1>
</ui:define>
<ui:define name="content" >
<h:form>
<p:growl id="messagesLogin"/>
<p:panel header="#{msn['login.header_panel']}" footer="Tutosoftware">
<h:panelGrid columns="2" cellpadding="5">
<h:outputLabel value="Email:" for="email" style="color:white" />
<p:inputText id="email" value="#{loginView.email}" required="true" label="#{msn['login.user_label']}">
</p:inputText>
<h:outputLabel value="#{msn['login.password']}" for="contrasena" style="color:white" />
<p:password id="contrasena" value="#{loginView.contrasena}" required="true" label="password">
</p:password>
<f:facet name="footer">
<p:commandButton value="#{msn['login.acceder']}" action="#{loginView.loginAccess}" update="messagesLogin" > </p:commandButton>
</f:facet>
</h:panelGrid>
</p:panel>
</h:form>
</ui:define>
</ui:composition>
</div>
</h:body>
</html>
Cremos el archivo admin.xhtml
<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>
</h:head>
<h:body>
<ui:composition template="plantilla.xhtml">
</ui:composition>
</h:body>
</html>