JSF: problemas com templates

17 respostas
A

Estou com problemas em uma aplicação JSF e é difícil de explicar

a aplicação tem uma página template com links para outras páginas.

Quando a aplicação é executada abre a tela de login ao digitar o login e senha deve ir para tela de links(menus) para ser escolhido(template).

template:

<h:form style ="float:left;" rendered ="#{not empty sessionScope.usuario}">
		
			<h:link value="Filhos" outcome="filhos"/>
 &nbsp;
 			<h:link value="Pais" outcome="pais"/> 
 &nbsp;		
            <h:link value="Endereco" outcome="endereco"/>	
 &nbsp;
			<h:commandLink value ="Logout" action ="#{autenticadorBean.registraSaida}"/>
 
		</h:form>
		
		<div style="clear:both">
			</div> </div>

			<div id="conteudo">
				<ui:insert name="conteudo">Espaco para o conteudo da tela</ui:insert>
				</div>

página do link filhos:

<ui:define name="conteudo"> 

		<h1>Filhos</h1>

		<h:form>
			<ui:include src="/formulario-novos-filhos.xhtml"/>
			<ui:include src="/lista-de-filhos.xhtml"/>
		</h:form>
	</ui:define>
</ui:composition>

link pais:

<ui:define name="conteudo">

		<h1>Pais</h1>

		<h:form>
			<ui:include src="/formulario-novos-pais.xhtml"/>
			<ui:include src="/lista-de-pais.xhtml"/>
		</h:form>
	</ui:define>
</ui:composition>

link endereco:

<ui:define name="conteudo">

		<h1>Endereco</h1>

		<h:form>
			<ui:include src="/formulario-novo-endereco.xhtml"/>
			<ui:include src="/lista-de-enderecos.xhtml"/>
		</h:form>
	</ui:define>
</ui:composition>

apesar de semelhantes são lançadas exceções diferentes:

<ui:define name="conteudo"> nas três páginas não é lançada exceção, mas os links não direciona ao conteúdo escolhido.

<ui:define name=" conteudo" (com espaço após as aspas) é lançada exceções diferentes quando o link é clicado.

filhos: é lançada uma exceção de persistência como se aplicação estive tentando inserir o filho antes de abrir o formulário sem mesmo ter dados para a inserção:“could not insert”.

pais: solta a exceção:java.lang.IllegalArgumentException

endereco: solta a exceção do hibernate de endereco não mapeado, mesmo sendo mapeado.

17 Respostas

tmvolpato

antes de mais nada
você especificou esses outcome no faces-config?

A

Não.

no material que estou usando como referência não faz nenhuma configuração no faces-config.

como seria?

A

Encontrei este exemplo, me corijam se eu estiver errado

<navigation-rule>
      <from-view-id>/tabular.jsp</from-view-id> // página remetente
      <navigation-case>
        <from-outcome>drilldown</from-outcome> //nome do outcome
        <to-view-id>/edit.jsp</to-view-id>           //página destino
      </navigation-case>
    </navigation-rule>

É Isso?

Isto é necessário no JSF 2?

tmvolpato

Alexsandro Lopes:
Encontrei este exemplo, me corijam se eu estiver errado

<navigation-rule>
      <from-view-id>/tabular.jsp</from-view-id> // página remetente
      <navigation-case>
        <from-outcome>drilldown</from-outcome> //nome do outcome
        <to-view-id>/edit.jsp</to-view-id>           //página destino
      </navigation-case>
    </navigation-rule>

É Isso?

Isto é necessário no JSF 2?

Não é necessario mas algumas pessoas ainda usam, isso fica a gosto do fregues

os arquivos .xhtml estão todos no mesmo diretorio?

A

fiz assim:

<navigation-rule>
		<from-view-id>/template/template.xhtml</from-view-id>
		<navigation-case>
			<from-outcome>filhos</from-outcome>
			<to-view-id>/filhos.xhtml</to-view-id>
		</navigation-case>
	</navigation-rule>
	
	<navigation-rule>
		<from-view-id>/template/template.xhtml</from-view-id>
		<navigation-case>
			<from-outcome>pais</from-outcome>
			<to-view-id>/pais.xhtml</to-view-id>
		</navigation-case>
	</navigation-rule>
	
	<navigation-rule>
		<from-view-id>/template/template.xhtml</from-view-id>
		<navigation-case>
			<from-outcome>endereco</from-outcome>
			<to-view-id>/endereco.xhtml</to-view-id>
		</navigation-case>
	</navigation-rule>

mas não deu certo. continua com os erros.

o meu gosto é que a aplicação rode sem problemas.

Estão(na raiz), exceto o template que está dentro do diretório: WebContent/WEB-INF/template/template.xhtml por ser um modelo.

tmvolpato

cole seu log completo aqui

qual versão do jsf vc está usando

A

somente o erro:

Jul 18, 2013 10:07:28 PM com.sun.faces.application.view.FaceletViewHandlingStrategy handleRenderException
SEVERE: Error Rendering View[/pais.xhtml]
java.lang.IllegalArgumentException

está acontecendo após digitar login e senha e clicar ok
e com o <ui:define name=“conteudo”> porque há diferença quando faço: <ui:define name=" conteudo"> com espaço após as aspas!

a versão do JSF é 2.0.4

tmvolpato

Alexsandro Lopes:
somente o erro:

Jul 18, 2013 10:07:28 PM com.sun.faces.application.view.FaceletViewHandlingStrategy handleRenderException
SEVERE: Error Rendering View[/pais.xhtml]
java.lang.IllegalArgumentException

está acontecendo após digitar login e senha e clicar ok
e com o <ui:define name=“conteudo”> porque há diferença quando faço: <ui:define name=" conteudo"> com espaço após as aspas!

a versão do JSF é 2.0.4

use a versão 2.1 pelo menos
e outra cole o código do seu template ai

A

tenho também um ManagerBean: AutenticacaoBean que caso o login e senha estejam corretos redireciona pra alguma página.

Aí está o problema!

quando é redirecionada para a página filhos.xhtml levanta a exceção:

javax.servlet.ServletException: org.hibernate.exception.GenericJDBCException: could not insert: [br.com.catenna.modelo.entidade.filhos.Filhos]

quando é redirecionada para a página pais.xhtml levanta a exceção:

java.lang.IllegalArgumentException

quando é redirecionada para a página endereco.xhtml levanta a exceção:

javax.servlet.ServletException: org.hibernate.hql.ast.QuerySyntaxException: endereco is not mapped [SELECT x FROM endereco X]

o relacionamento entre as entidades são: Filhos N : 1 Pais N : 1 Endereco

sabendo-se que cada tela devem abrir um formulário de cadastro e uma lista dos respectivos beans.

A

Opa! não tinha lido sua resposta antes de postar a última.

Caramba! essas bibliotecas JSF estão dando dor de cabeça já vou trocar pela 2ª vez! da última vez esta dando: java.lang.incompatible.class.change.error

a final quantas biblioteca são para JSF? pois no site do Mojarra ao baixar vem apenas um jar.

segue o Template.xhtml

<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>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
	<title>Catenna</title>
</h:head>

<h:body>
	<h:outputStylesheet library="css" name="style.css"/>

	<div id="header">
	<h:form style ="float:left;" rendered ="#{not empty sessionScope.usuario}">
		
			<h:link value="Filhos" outcome="filhos"/>
 &nbsp;
 			<h:link value="Pais" outcome="pais"/> 
 &nbsp;		
            <h:link value="Endereco" outcome="endereco"/>	
 &nbsp;
			<h:commandLink value ="Logout" action ="#{autenticadorBean.registraSaida}"/>
 
		</h:form>
		
		<div style="clear:both">
			</div> </div>

			<div id="conteudo">
				<ui:insert name="conteudo">Espaco para o conteudo da tela</ui:insert>
				</div>

				<div id="footer" style="text-align:center">
					<hr/>
				</div>
</h:body>
</html>
tmvolpato

deixe dessa maneira é test

<?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: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>  
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>  
        <title>Catenna</title>  
    </h:head>  
      
    <h:body>  
        <h:outputStylesheet library="css" name="style.css"/>  
      
        <div id="header">  
        <h:form style ="float:left;" rendered ="#{not empty sessionScope.usuario}">  
              
                <h:link value="Filhos" outcome="filhos"/>  
       
                <h:link value="Pais" outcome="pais"/>   
            
                <h:link value="Endereco" outcome="endereco"/>   
       
                <h:commandLink value ="Logout" action ="#{autenticadorBean.registraSaida}"/>  
      
            </h:form>  
              
            <div style="clear:both">  
                </div> </div>  
      
                <div id="conteudo">  
                    <ui:insert name="conteudo">
                      <ui:include src="content.xhtml"/> <!-- procure sempre deixar uma página como default -->
                    </ui:insert>  
                    </div>  
      
                    <div id="footer" style="text-align:center">  
                        <hr/>  
                    </div>  
    </h:body>  
    </html>
A

As libs são essas?

javax.faces-2.2.1-sources.jar
javax.faces-2.2.1.jar
jsf-impl-2.2.1.jar
javax.faces-api-2.2.jar

na linha 35 tem:

<ui:include src="content.xhtml"/>

terei que criar a página content.xhtml?

tmvolpato

Alexsandro Lopes:
As libs são essas?

javax.faces-2.2.1-sources.jar
javax.faces-2.2.1.jar
jsf-impl-2.2.1.jar
javax.faces-api-2.2.jar

na linha 35 tem:

<ui:include src="content.xhtml"/>

terei que criar a página content.xhtml?

é bom vc usar a versão anterior por enquanto

javax.faces-2.1.23.jar //somente essa

isso vai ter que criar é bom trabalhar dessa maneira //não precisa ter esse nome pode ser outro

A

O que me intriga é que as páginas pais.xhtml, filhos.xhtml e endereco.xhtml que por sinal são semelhantes, são páginas com links, que ao ser clicado abre os formulários e listas.

Tirando a página pais as outras duas logo após o login já vão direto para o sistema chegando até na camada de persistência.

Eu não entendo isso.

A

Só tenho progresso quando coloco:

<ui:define name="   conteudo"
                  ^                                     
                  |
              ESPAÇO
criei a página content.xhtml assim:
<ui:composition template="/WEB-INF/template/template.xhtml"
	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">

	<ui:define name="conteudo">
		<p>Espaco para o conteudo da tela</p>
	</ui:define>
</ui:composition>

mais ficou duplicado com página sobre página:

A

deveria ficar como nesta imagem

ao abrir este layout o usuário teria a opção de escolher qual a entidade se quer cadastrar ou pesquisar, mas ao clicar esses links com está na figura não há efeito algum somente atualiza a tela sem mudança de conteúdo!

só consigo chegar a esta tela com o espaço no nome da tag define.

sem o espaço, gera exceções distintas que também ocorre quando redireciona a página no ManageBean de autenticação.


tmvolpato

você pode passa seu projeto
pq esta vai fica difícil de te ajuda

Criado 18 de julho de 2013
Ultima resposta 19 de jul. de 2013
Respostas 17
Participantes 2