Um ou mais recursos possuem o destino de 'head'... jsf 2 + facelets + primefaces + template

7 respostas
S

Bom dia pessoal.

Estou desenvolvendo um aplicativo utilizando jsf 2.1 facelets + primefaces 3.4 + template e estou recebendo o erro abaixo ao carregar o template:

Um ou mais recursos possuem o destino de 'head', mas nenhum componente de 'head' foi definido na exibição.

Pesquisei sobre o assunto e em todos os posts, a solução dada é trocar a tag por <h:head>, no entanto, meu template já está com a tag <h:head>, conforme abaixo:

<!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:ui="http://java.sun.com/jsf/facelets"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui">
<h:head>
    <title>JVMSOFTWARE - DELIVERY</title>
</h:head>
<h:body>
      <div id="dtopo" align="center">
        <ui:insert name="topo">
            <ui:include src="/topo/topo.xhtml"/>
        </ui:insert>
      </div>
      <br/>
      
      <div id="dmenu" align="center">
        <ui:insert name="menu">
            <!-- 
            se utilizado em sistema diferente,
            alterar sistem na construção do param
            -->
            <ui:include src="http://localhost:8081/Delivery/menu/menu.xhtml?param=#{loginBean.usr}:DLV"/>
        </ui:insert>
      </div>
      <br/>
      
      <p:messages/>
      
      <div id="dprincipal" align="center">
        <ui:insert name="principal">
        </ui:insert>
      </div>
      
</h:body>  
</html>

Já tentei incluir a tag <h:head> nas paginas de composição, mas continua com problema.
Vocês tem alguma idéia de porque isso pode estar ocorrendo? podem ajudar?

7 Respostas

D

Olá siesler,

Não sei se irá resolver, mas tente adicionar um <p:resources/> dentro do <h:head>, desta forma:

<h:head>  
        <title>JVMSOFTWARE - DELIVERY</title>
        <p:resources/>  
    </h:head>

Se ainda não funcionar, poste aqui os arquivos que você inclui no template. (:

S

Bom dia David.

Não funcionou, seguem os códigos das paginas usadas no include:

topo.xhtml:

<ui:fragment
    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">

    <h:form id="formTopo">  
      <p:panelGrid columns="6"/>
        <p:column>
            usuario
        </p:column>
        <p:column>
            <p:inputText value="#{loginBean.usuario.user}" disabled="true" style="font-size:small"/>
        </p:column>
        <p:column>
            empresa
        </p:column>
        <p:column>
            <p:inputText value="#{loginBean.empresa.fantasia}" disabled="true" style="font-size:small"/>
        </p:column>
        <p:column>
            sistema
        </p:column>
        <p:column>
            <p:inputText value="#{loginBean.sistema.nomeSistema}" disabled="true" style="font-size:small"/>
        </p:column>
  </h:form>
</ui:fragment>

menu.xhtml:

<ui:fragment
    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">

    <f:metadata>
        <f:viewParam name="param" value="#{indexController.param}"/>
        <f:event type="preRenderView" listener="#{indexController.init}"/>
    </f:metadata>

    <center>
    <p:panel style="font-size: 10px; text-align: center;width: 850px; vertical-align: middle;">     
        <h:panelGrid columns="1">
            <h:column>
                <h:form id="formMenu">
                    <p:menubar style="font-size: 10px; text-align: left; width: 810px; vertical-align: middle;" model="#{indexController.menuModel}"/>
                </h:form>
            </h:column>
        </h:panelGrid>
    </p:panel>
    </center>

</ui:fragment>

Se precisar que eu poste as paginas que são abertas na insert “principal”, avisa que eu posto aqui
Obrigado

D

Que estranho… testei aqui e funcionou.
Se puder, poste as páginas que são abertas na insert “principal” então.

S

seguem as paginas da insert principal:

cardapios.xhtml:

<ui:composition template="principal.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">
  <ui:define name="principal">

    <h:form id="formCardapio">
      Pagina de cardapios
    </h:form>

  </ui:define>
</ui:composition>

clientes.xhtml

<ui:composition template="principal.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">
  <ui:define name="principal">

    <h:form prependId="false" id="formCliente">
        <p:panel style="font-size: small">
            <p:commandButton icon="ui-icon-search" value="pesquisar" onclick="dlg.show();"/>
            <p:commandButton icon="ui-icon-plusthick" value="incluir"/>
        </p:panel>
        
        <p:dataTable style="font-size:small" id="tabelaClientes" var="iten" value="#{clientesBean.listClientes}"  
                     paginator="false" rows="10"  
                     paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"  
                     rowsPerPageTemplate="5,10,15">  
            <f:facet  name="header">  
                Ajax Pagination
            </f:facet>  

            <p:column>  
                <f:facet name="header">  
                    <h:outputText value="Acoes"/>  
                </f:facet>  
                <p:commandButton icon="ui-icon-pencil"/>
                <p:commandButton icon="ui-icon-trash"/>
            </p:column>  
            
            <p:column>  
                <f:facet name="header">  
                    <h:outputText value="NomeCliente"/>  
                </f:facet>  
                <h:outputText value="#{iten.nome}"/>
            </p:column>  

            <p:column>  
                <f:facet name="header">  
                    <h:outputText value="DDD" />
                </f:facet>  
                <h:outputText value="#{iten.ddd}" />  
            </p:column>  

            <p:column>  
                <f:facet name="header">  
                    <h:outputText value="Telefone" />  
                </f:facet>  
                <h:outputText value="#{iten.telefone}" />  
            </p:column>

            <p:column>
                <f:facet name="header">
                    <h:outputText value="Bairro"/> 
                </f:facet>  
                <h:outputText value="#{iten.bairro}"/>
            </p:column>  >

            <p:column>
                <f:facet name="header">
                    <h:outputText value="Endereço"/> 
                </f:facet>  
                <h:outputText value="#{iten.endereco}"/>
            </p:column>  
        </p:dataTable>  

    <p:dialog header="Enter FirstName" widgetVar="dlg" resizable="false">  
        <h:form id="form">  
            <ui:include src="clientesConsulta.xhtml"/>
        </h:form>  
    </p:dialog> 
    </h:form>
      
  </ui:define>
</ui:composition>

clientesConsulta.xhtml (chamada pela pagina clientes.xhtml):

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<!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:f="http://java.sun.com/jsf/core"
      xmlns:p="http://primefaces.org/ui">

    <h:form>
        <div align="center">
        <br/><br/>
        consulta de clientes<br/>
            <h:panelGrid columns="2" cellpadding="5">  
                <h:outputLabel style="font-size: small" for="telefone" value="Telefone" />
                <p:inputText size="9" style="font-size: small" value="#{clientesBean.telefone}"   
                        id="telefone" label="telefone" />  

                <h:outputLabel style="font-size: small" for="documento" value="CPF/CNPJ:" />  
                <p:inputText style="font-size: small" value="#{clientesBean.cpfCnpj}"   
                        id="documento" label="documento" />

                <h:outputLabel style="font-size: small" for="nome" value="nome:" />  
                <p:inputText style="font-size: small" value="#{clientesBean.nome}"   
                        id="nome" label="nome" />

            </h:panelGrid>
        <p:commandButton id="submitButton" icon="ui-icon-search" value="pesquisar" ajax="true"
                         update=":formCliente:tabelaClientes" oncomplete="dlg.hide();" action="#{clientesBean.listCliente}">
            <f:setPropertyActionListener target="#{clientesBean.empresa}" value="#{loginBean.empresa}"/>
        </p:commandButton>
        </div>
    </h:form>
</html>

tentei uncluir na clientesConsulta.xhtml

<h:head>
        <p:resources/>
    </h:head>

mas mesmo assim continua com a mensagem de head
obrigado

S

reparei que no <h:head> sempre está com alerta na IDE: content is being hidden from the validator based on namespace filtering
estou usando netbeans 7.3

Att:

D

Estranho isso, criei um projeto aqui, adicionei esses arquivos, apenas tirando referências a beans e coisas do tipo, e não apareceu essa mensagem que você falou.
Em compensação, apareceu uma outra:

Tente fazer o seguinte: Veja se no seu arquivo web.xml está desse jeito:

<context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</param-value>
    </context-param>

Se estiver, tente trocar por:

<context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Product</param-value>
    </context-param>

Se ainda assim não funcionar, não sei o que pode ser… =//

S

Testei aqui e funcionou em partes.

Antes de alterar o web.xml, eu tinha a mensagem duplicada, uma como uma anotação simples na pagina e outra do componete <p:messages> do primefaces.

A anotação simples não está sendo mais exibida na pagina, mas a do componente primefaces continua sendo exibida.

To achando que o problema tá na tela de login do sistema.

Vou fazer mais uns testes aqui e posto depois

Obrigado

Criado 27 de março de 2013
Ultima resposta 27 de mar. de 2013
Respostas 7
Participantes 2