<<<Problemas com Template>>>> Help JSF 2 ajudem aêêêê [RESOLVIDO]

10 respostas
S

Boa tarde!!

pessoal estou usando template no jsf, e meu site tem a seguinte estrutura básica

(index.xhtml)

<h:body>


<ui:insert name=“top”>
<ui:include id=“top” src=“menu.xhtml”/>
</ui:insert>
<div
        <ui:insert name="content"/>
    </div>

</h:body>

(fim index.xhtml)

na pagina de menu estou com a seguinte estrutura. coloquei apenas um botao para testar

(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”>
<h:form>
<h:commandButton type=“button” action="/Cliente/cadastro" image="/imagem/cadastro_usuario.png" styleClass=“imgTopMenu”/>
</h:form>
</ui:fragment>
(fim menu.xhtml)

ao clicar no botão a action chama a pagina de cadastro q é um clinte do template, abaixo esta a pag de cadastro

(cadastro.xhtml)

<ui:composition xmlns:ui=“http://java.sun.com/jsf/facelets
template="./index.xhtml"
xmlns:h=“http://java.sun.com/jsf/html
xmlns=“http://www.w3.org/1999/xhtml
xmlns:c=“http://java.sun.com/jsp/jstl/core
xmlns:f=“http://java.sun.com/jsf/core”>

<ui:define name="content">
            <h:outputText value="#{msg.MeuCadastro}" styleClass="textoTituloFormulario"/>
</ui:define>

</ui:composition>

Meu problema é o seguinte…

ao clicar a primeita vez no botao, a pagina carrega normalmente, só que se eu clicar denovo no mesmo botao do menu para abrir a tela de cadastro denovo a tela de cadastro ebre fora do template… alguém ai sabe como posso resolver isso?

abraço galera!

10 Respostas

david.cs20

Primeiro acesse este topico http://www.guj.com.br/posts/list/21526.java
E corija seu topico para fica mais facil de ajudar vc com seu problema.

dev.rafael

A página é carregada sem o template ou sem os estilos? Verifique se ñ é só o seu CSS q ñ está carregando. E por favor, da próxima vez use tags [code] p/ postar código.

S

carrega fora do template mesmo

abaixo as telas

------------template------------

&lt;?xml version='1.0' encoding='UTF-8' ?&gt;
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;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"&gt;
    &lt;f:loadBundle basename="recurso.mensagem" var="msg"/&gt;
    &lt;h:head&gt;
        &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;
        &lt;link href="./resources/css/default.css" rel="stylesheet" type="text/css" /&gt;
        &lt;link href="./resources/css/cssLayout.css" rel="stylesheet" type="text/css" /&gt;
        &lt;title&gt;Principal&lt;/title&gt;
    &lt;/h:head&gt;

    &lt;h:body&gt;

        &lt;div id="divIndexTop" class="divIndexTop"&gt;
            &lt;ui:insert name="top"&gt;
                &lt;ui:include id="top" src="top.xhtml"/&gt;
            &lt;/ui:insert&gt;
        &lt;/div&gt;

        &lt;div id="divIndexContent" class="divIndexContent"&gt;
            &lt;ui:insert name="content"/&gt;
        &lt;/div&gt;

    &lt;/h:body&gt;

&lt;/html&gt;




-----------menu-----------


&lt;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"&gt;
        &lt;h:form&gt;
            &lt;div&gt;
                &lt;h:commandButton type="button" action="/Cliente/cadastro" image="/imagem/cadastro_usuario.png" styleClass="imgTopMenu"/&gt;
                &lt;div&gt;&lt;h:outputText value="#{msg.Cadastro}"/&gt;&lt;/div&gt;
            &lt;/div&gt;
           &lt;/h:form&gt;
&lt;/ui:fragment&gt;



---------tela de cadastro-----

&lt;?xml version='1.0' encoding='UTF-8' ?&gt;
&lt;!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;ui:composition xmlns:ui="http://java.sun.com/jsf/facelets"
                template="./../index.xhtml"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns="http://www.w3.org/1999/xhtml"
                xmlns:c="http://java.sun.com/jsp/jstl/core"
                xmlns:f="http://java.sun.com/jsf/core"&gt;

    &lt;ui:define name="content"&gt;
        conteudo cadastro
    &lt;/ui:define&gt;

&lt;/ui:composition&gt;
dev.rafael

Kra vc ñ respondeu a minha pergunta mas eu vou tentar ajuda-lo assim mesmo. Mude esse pedaço do seu código:

<link href="./resources/css/default.css" rel="stylesheet" type="text/css" />  
<link href="./resources/css/cssLayout.css" rel="stylesheet" type="text/css" />

Para isso:

<h:outputStylesheet name="css/default.css" />
<h:outputStylesheet name="css/cssLayout.css" />

Mas mantenha os seus arquivos dentro do diretório resources. Testa ai e me diz se deu certo.

S

cara valew hem…

opah, eu tinha respondido sim mano, ta logo no inicio, eu disse que carregava fora do template, mas isso poco importa agora, pois com essa alteração resolveu o problema… hahah

só não entendi o porq disso? qual a diferença de uma para outro?

ABRAÇO!!!

dev.rafael

É o seguinte. Quando vc navega com o JSF, componentes como o commandButton e o commandLink fazem o q é chamado de postback. O postback é uma requisição p/ a página atual onde o processamento do servidor ocorre. O JSF, então, retorna uma outra página de acordo com a sua regra de navegação. Assim, vc pode notar q, após navegar com um commandButton ou commandLink, a url no browser aparece como sendo a página anterior. O problema é o browser localiza css, javascripts e images de modo relativo a essa url. Provavelmente o seu arquivo index.xhtml devia estar na raiz em /web q deve ser o mesmo diretório onde vc colocou /resources. Por isso o caminho ./resources/css/default.css foi encontrado. E por isso q quando vc navega pela primeira vez tudo parece normal, pq a url ainda é da página index.xhtml e o browser ainda consegue localizar esses arquivos. O problema e q, da segunda vez q vc navega, a url é atualizada e, como ela está dentro de outro diretório, os caminhos dos css ficam inválidos.

A tag <h:outputStylesheet> cria o p/ vc e procura esses arquivos sempre em um diretório /resource dentro do diretório web. Quando vc use essa tag nova vc ñ precisa se preocupar com a localização exata de arquivo arquivo css, contanto q vc se lembre de deixa-los dentro do diretório /resources.

S

cara muito boa a explicação, e obrigado pela força, estava empacado em 2 problemas e você resolveu os 2, valew pela ajuda e parabenizo pela força que vc da para o forum!
Abraço cara!

T

Estou com o mesmo problema, so que em relação a imagem do meu cabeçalho que está dentro do tamplate, algumas páginas que utilizam tamplate não consgue
exibira as imagens por causa do caminho. Será que existe alguma tag igual a <h:outputStylesheet> so que para imagens ???

satangoss

ThiagoFer:
Estou com o mesmo problema, so que em relação a imagem do meu cabeçalho que está dentro do tamplate, algumas páginas que utilizam tamplate não consgue
exibira as imagens por causa do caminho. Será que existe alguma tag igual a <h:outputStylesheet> so que para imagens ???


Então cara com o JSF 2.0 você pode criar uma pasta resource e dentro dela uma pasta imagens, e colocar as imagens la dentro, dai você pode exibir de 2 formas :

Uma delas é com o atributo value , no qual a expressão #{resource[]} trará o caminho exato da imagem:

<h:graphicImage value="#{resource['imagens:suaImagem.png']}" />

Outra forma bem mais amigavel é usa o atributo library que indica a subpasta de resources na qual a imagem está:

<h:graphicImage library="imagens" name="suaImagem.png" />

dentro da pasta resource vc pode ter várias outras pastas como css e utilizar o mesmo conceito para mostrar os estilos, ficando com o código muito mais limpo e organizado.

Referência: Programação Java para web: Décio Heizenlmann

T

Valeu amigo, testei aqui e funciono perfeitamente

Obrigado

Criado 15 de outubro de 2010
Ultima resposta 30 de jul. de 2012
Respostas 10
Participantes 5