[RESOLVIDO]Template facelets funciona apenas no index.xhtml

Olá, pessoal!

sou novato no fórum e estou precisando de uma ajuda quanto ao uso do facelets.

O problema é o seguinte:

estou desenvolvendo um site como trabalho da faculdade e resolvi utilizar a facilidades proporcionadas pelo uso de templates no JSF.

Segui vários tutoriais a respeito do uso de facelets e me deparei com um problema onde estou “encalhado” a dois dias.

eis o m eu template master.xhtml, que serve de padrão para todas as outras paginas.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html 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">
    <h:head>
        <title>
            <ui:insert name="TituloDaPagina"/>
        </title>
        <h:outputStylesheet name="estilo.css" library="css"/>
    </h:head>
    <h:body>
        <div id="divTopo">
            <ui:insert name="divTopo">
                <ui:include src="topo.xhtml"/>
            </ui:insert> 
        </div>

        <div id="divMenuEsq">
            <ui:insert name="menuEsquerda">
                <ui:include src="esquerda.xhtml"/>
            </ui:insert>
        </div>

        <div id="conteudo">
            <ui:insert name="conteudo"/>
        </div>

        <div id="rodape">
            <ui:include src="rodape.xhtml"/>
        </div>

    </h:body>
</html>

e aqui está a página esquerda.xhtml, referenciada no template:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:h="http://java.sun.com/jsf/html">
   
    <h:body>
        <ui:composition>
            <h:graphicImage name="perfil.png" library="images" width="170" height="200"/>
            <hr/>
            <h:form>
                <h:outputLink value="novoLivro.xhtml">novo Livro</h:outputLink><br/>
                <h:outputLink value="meusLivros.xhtml">Meus Livros</h:outputLink><br/>
                <h:outputLink value="editarPerfil.xhtml">Editar Perfil</h:outputLink><br/>
            </h:form>
            <hr/>
        </ui:composition>
        
        
    </h:body>
</html>

na minha página index.xhtml o template é renderizado perfeitamente, porém quando tento navegar nas páginas referenciadas no menu esquerdo, o template é simplesmente ignorado
nessas outras páginas. Veja minha pagina “novoLivro.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 template="template/master.xhtml">
            <ui:define name="TituloDaPagina">
               NovoLivro
            </ui:define>
            <ui:define name="conteudo">
                 <h1>apenas um teste!</h1>
            </ui:define>
        </ui:composition>
    </h:body>
</html>

já procurei por vários tópicos semelhantes, mas nenhum apresentou uma solução referente a este tipo de problema.
Sempre procuro respostar para minhas dúvidas no fórum e sempre encontro soluções, porém desta vez estou “desesperado” o tempo está se esgotando
e ainda não achei solução para isto.

se alguém puder me ajudar ficarei grato.
caso seja necessário alguma informação complementar, e só pedir.

Grato!

em novolivro.xml, coloque o “/” antes.

<ui:composition template="/template/master.xhtml">

Primeiramente, obrigado por responder.

então, já tentei usar o “/”, mas tmbm não funcionou. O estranho é que não ocorre nenhum erro de referência ao navegar pelas páginas.

vou postar a estrutura do meu projeto:

não consigo visualizar nenhum problema com ele.

Esse problema pode estar relacionado com a configuração do meu web.xml?

Consegui resolver aqui. Tive que fazer algumas alterações no arquivo web.xml.

como ele estava:

<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <context-param> <param-name>javax.faces.PROJECT_STAGE</param-name> <param-value>Development</param-value> </context-param> <servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>/faces/*</url-pattern> </servlet-mapping> <session-config> <session-timeout> 30 </session-timeout> </session-config> <welcome-file-list> <welcome-file>faces/index.xhtml</welcome-file> </welcome-file-list> </web-app>

como ele ficou:

<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <context-param> <param-name>javax.faces.PROJECT_STAGE</param-name> <param-value>Development</param-value> </context-param> <servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>*.xhtml</url-pattern> </servlet-mapping> <session-config> <session-timeout> 30 </session-timeout> </session-config> <welcome-file-list> <welcome-file>index.xhtml</welcome-file> </welcome-file-list> </web-app>

Agora está funcionando corretamente.

Só não entendi muito bem a necessidade desta alteração. Alguém pode me explicar?