Facelets: pÁgina nÃo carrega no template

8 respostas
Morpheus_Urubu

Pessoal, mais uma etapa da minha briga com o sistema:

Estou aqui tentando aprender Facelets, ja fucei a documentacao, peguei algumas "receitas de bolo" na internet, porem o problema persiste:

Eu crio um template,xhtml, marco as posições e entao vou criar os devidos *.xhtml para as posicoes que marquei: EIS QUE NAO ACONTECE NADA !!!

Quando eu executo no meu navegador, apenas o que esta no template.xhtml e mostrado na tela, perfeitamente por sinal, so que ele não tras para a tela o arquivo que eu quero que aparece no conteudo, nem ferrando !

Alguem ja passou por algum problema semelhante para me dar uma luz ?

Mais uma vez muito obrigado !

Meus XHTML:

template.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:ui="http://java.sun.com/jsf/facelets"
      xmlns:rich="http://richfaces.ajax4jsf.org/rich">

    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
        <link href="./css/default.css" rel="stylesheet" type="text/css" />
        <link href="./css/cssLayout.css" rel="stylesheet" type="text/css" />
        <title>WebTarefas 2.0</title>
    </head>

    <body>

        <div id="top">
            <ui:insert name="top">Topo</ui:insert>
        </div>
        <div>
            <div id="content" class="right_content">
                <ui:insert name="Conteudo">
                   
                </ui:insert>
            </div>
        </div>
        <div id="bottom">
            <ui:insert name="bottom">Rodape</ui:insert>
        </div>

    </body>

</html>

meu arquivo setor.xhtml (conteudo que eu quero carregar na marcação Conteudo)

<?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">
    <ui:composition 
      xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:rich="http://richfaces.ajax4jsf.org/rich"
      template="./template.xhtml">
        <ui:define name="Conteudo">

            <body>

                <f:view>

                    <h1><h:outputText value="Cadastro de Setores" /></h1>
                    <h:form>

                        <h:dataTable value="#{setorManaged.setores}" var="st">
                            <h:column>
                                <f:facet name="header">
                                    <h:outputText  value="Setor"/>
                                </f:facet>
                                <h:outputText value="#{st.setor}"/>
                            </h:column>
                            <h:column>
                                <f:facet name="header">
                                    <h:outputText  value="Descrição"/>
                                </f:facet>
                                <h:outputText value="#{st.descricao}"/>
                            </h:column>
                            <h:column>
                                <f:facet name="header">
                                    <h:outputText  value="Alterar"/>
                                </f:facet>
                                <h:commandLink value="Alterar" action="#{setorManaged.alterar}">
                                    <f:setPropertyActionListener value="#{st.idSetor}"
                                                                 target="#{setorManaged.setor.idSetor}" />
                                </h:commandLink>
                            </h:column>
                            <h:column>
                                <f:facet name="header">
                                    <h:outputText  value="Excluir"/>
                                </f:facet>
                                <h:inputHidden value="#{setorManaged.setor.idSetor}" />
                                <h:commandLink value="Excluir" action="#{setorManaged.excluir}" >
                                    <f:setPropertyActionListener value="#{st.idSetor}"
                                                                 target="#{setorManaged.setor.idSetor}" />
                                </h:commandLink>
                            </h:column>
                        </h:dataTable>

                        <h:inputText value="#{setorManaged.setor.setor}"  />
                        <h:inputText maxlength="100" value="#{setorManaged.setor.descricao}" size="100" />
                        <h:commandButton value="Cadastrar" action="#{setorManaged.inserir}" />
                    </h:form>

                </f:view>

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

8 Respostas

Morpheus_Urubu

Uma duvida que surgiu agora, o arquivo WEB.XML, está assim:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 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_2_5.xsd">

    <context-param>
       <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
       <param-value>.xhtml</param-value>
    </context-param>

    <context-param>
        <param-name>com.sun.faces.verifyObjects</param-name>
        <param-value>false</param-value>
    </context-param>
    <context-param>
        <param-name>com.sun.faces.validateXml</param-name>
        <param-value>true</param-value>
    </context-param>
    <context-param>
        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
        <param-value>client</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/setor.xhtml</welcome-file>
     </welcome-file-list>

    <!-- RICHFACES CONFIG -->
    <filter>
        <display-name>Ajax4jsf Filter</display-name>
        <filter-name>ajax4jsf</filter-name>
        <filter-class>org.ajax4jsf.Filter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>ajax4jsf</filter-name>
        <servlet-name>Faces Servlet</servlet-name>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>INCLUDE</dispatcher>
    </filter-mapping>

    <context-param>
       <param-name>org.richfaces.SKIN</param-name>
       <param-value>blueSky</param-value>
    </context-param>

    <listener>
       <listener-class>
          com.sun.faces.config.ConfigureListener
       </listener-class>
    </listener>

        </web-app>

Essa marcação deve apontar para o template principal ? No meu caso template.xhtml


faces/template.xhtml

Morpheus_Urubu

Alguem ???

H

Bom dia diegocharles!

Dá uma olhada se esse é o caminho certo para o seu template. E o no seu setor.xhtml, você não precisa ter novamente a tag pois ela já existe no template.
Outra coisa, acho que não precisa declarar no web.xml o template…

<welcome-file-list>
<welcome-file>index.xhtml</welcome-file>
</welcome-file-list>

A tag welcome-file-list server para vc declarar quais são as páginas de acesso ao seu sistema.

Qualquer coisa é só avisar…
Abraço!

Morpheus_Urubu

haamilton:
Bom dia diegocharles!

Dá uma olhada se esse é o caminho certo para o seu template. E o no seu setor.xhtml, você não precisa ter novamente a tag pois ela já existe no template.
Outra coisa, acho que não precisa declarar no web.xml o template…

<welcome-file-list>
<welcome-file>index.xhtml</welcome-file>
</welcome-file-list>

A tag welcome-file-list server para vc declarar quais são as páginas de acesso ao seu sistema.

Qualquer coisa é só avisar…
Abraço!

O caminho no setor.xhtml está ok !

template=“template.xhtml”>

Quanto a declaração no meu web.xml, ai realmente eu to com duvida. Eu ja tentei tirar a declaração , porem dai quando eu executo o projeto, ele apenas lista o diretorio do meu projeto no browser.

Quando eu mudo o apontando para o meu setor.xhtml, ele mostra na tela o template certinho, porem ai acho que está errado né, pois ele deveria renderizar primeiro o template e ir chamando os “filhos”, que no caso o filho seria o template.xhtml. Não sei se meu pensamento esta certo.

H

E ae…

<welcome-file-list>
     <welcome-file>index.html</welcome-file>
     <welcome-file>index.xhtml</welcome-file>
     <welcome-file>index.htm</welcome-file>
  </welcome-file-list>

No welcome-file define qual é a primeira página que será acessada qndo a aplicação for chamada pela primeira vez pelo usuário.
Não sei se você percebeu, mas no seu template.xhtml você definiu isso:

...

<ui:insert name="top">Topo</ui:insert>

...

<ui:insert name="Conteudo">  
</ui:insert>

<ui:insert name="bottom">Rodape</ui:insert>

Essas declarações <ui:insert servem para você definir onde os conteúdo criados na sua setor.xhtml irão aparecer.
Se você olhar na sua setor.xhtml, você só definiu o conteúdo e por isso o topo e o rodapé não terão nada.

Valeu!

Morpheus_Urubu

hehehe Acho que nao to explicando direito a minha lógica:

no web.xml, eu chamo o template.xhtml, pq ele é o meu composer, e la eu marquei as posições TOPO, CONTEUDO, RODAPE.

O meu setor.xhtml, seria uma das várias páginas que iria compor a marcação CONTEUDO, assim como quero ter uma página TOPO.HXTML, e outra RODAPE.XHTML.

Não sei se a minha logica esta certa, mas quando eu desenvolvo alguma coisa usando o Composer Design, é assim que faço. Agora pode ser que no facelets a logica seja um pouco diferente, e está osso pra saber ja que o site oficial deles com a documentacao esta fora do ar (ou o proxy da empresa nao esta deixando eu acessar).

Obrigado

H

diegocharles:
hehehe Acho que nao to explicando direito a minha lógica:

no web.xml, eu chamo o template.xhtml, pq ele é o meu composer, e la eu marquei as posições TOPO, CONTEUDO, RODAPE.

O meu setor.xhtml, seria uma das várias páginas que iria compor a marcação CONTEUDO, assim como quero ter uma página TOPO.HXTML, e outra RODAPE.XHTML.

Não sei se a minha logica esta certa, mas quando eu desenvolvo alguma coisa usando o Composer Design, é assim que faço. Agora pode ser que no facelets a logica seja um pouco diferente, e está osso pra saber ja que o site oficial deles com a documentacao esta fora do ar (ou o proxy da empresa nao esta deixando eu acessar).

Obrigado

Então… para isso… https://facelets.dev.java.net/ de uma lida na documentação, ela explica como criar um template e usar nas páginas.

qualquer cois é só avisar

Abraço

sauron_fight

Estou com um problema quero usar Richfaces e facelets.

coloquei no xhtml : xmlns:rich=“http://richfaces.org/rich

dentro do arquivo xhtml chamo o compomente richfaces: <rich:calendar></rich:calendar>

mais dentro dos componente richfaces não tenho acesso aos atributos, so tendo acesso ao atributo id, estou usando
facelets 1.1.14 e richfaces 3.3.0

Como esta :<rich:calendar></rich:calendar>

Como deveria esta <rich:calendar converter="" currentDate="" dayStyleClass=""> </rich:calendar>

Desde ja agradeco a todos.

Criado 12 de maio de 2009
Ultima resposta 25 de jun. de 2010
Respostas 8
Participantes 3