Promeblas com o PrimeFaces na Sessão

15 respostas
ederson_js

Boa Tarde Companheiros (as) !

Estou desenvolvendo a pouco tempo com o primefaces, porém estou com um problema qua já há tempos vem me importunando, procurei aqui no guj alguma solução porém aidna não encontrei. Talves alguém de vocês possa me ajudar.
A dúvida é a seguinte, crio uma página com componentes do prime como o datatable, wizard e outros… fica lindoooooo, faço um teste rodando somente ela e fica perfeito, porém quando eu a jogo em sessão (rodando pra valer) ela perde todos os efeitos como paginação etc… alguem poderia me ajudar?

Desde já eu agradeço;

15 Respostas

A

como você está lançando a sessão? O que extra você adiciona na página? Coloca o exemplo do teu código pra podermos analizar e ver o que q está ocorrendo.

ederson_js
<?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:f="http://java.sun.com/jsf/core"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:p="http://primefaces.prime.com.tr/ui">

<ui:composition template="/templates/principal.xhtml">

	<h:head>
		<meta http-equiv="Content-Type" content="text/html; UTF-8" />
	</h:head>
	<ui:define name="corpo">
		<h:body>
			<h:form>

				<p:tabView>
					<p:tab title="Usuários">Usuários
						<div align="center"><h:messages /> <p:dataTable
							value="#{usuarioBean.lista}" var="usuario" rows="8"
							paginator="true" emptyMessage="Usuarios não encontrados"
							style="width:100%">

							<f:facet name="header">
								<h:outputText value="Listagem de Usuários" />
							</f:facet>

							<p:column style="width:16px">
								<p:rowToggler />
							</p:column>

							<p:column>
								<f:facet name="header">Código</f:facet>
								<h:outputText value="#{usuario.codigo}" />
							</p:column>

							<p:column>
								<h:graphicImage library="imagens"
									name="bandeira_#{usuario.idioma}.png" />
							</p:column>

							<p:column>
								<f:facet name="header">Nome</f:facet>
								<h:outputText value="#{usuario.nome}" />
							</p:column>

							<p:column>
								<f:facet name="header">e-Mail</f:facet>
								<a href="mailto:#{usuario.email}">#{usuario.email}</a>
							</p:column>

							<p:column>
								<h:commandLink action="#{usuarioBean.editar}">
									<h:graphicImage library="imagens" name="edit.png"
										style="border:0" />

									<f:setPropertyActionListener target="#{usuarioBean.usuario}"
										value="#{usuario}" />
									<f:setPropertyActionListener
										target="#{usuarioBean.destinoSalvar}" value="/admin/principal" />
								</h:commandLink>

								<h:commandLink action="#{usuarioBean.excluir}"
									onclick="if (!confirm('Confirma a exclusão do usuário #{usuario.nome}?')) return false;">
									<h:graphicImage library="imagens" name="del.png"
										style="border:0" />
									<f:setPropertyActionListener target="#{usuarioBean.usuario}"
										value="#{usuario}" />
								</h:commandLink>
							</p:column>



							<p:rowExpansion>
								<h:panelGrid id="display" columns="2" cellpadding="4"
									style="width:300px;" styleClass="ui-widget-content"
									columnClasses="label, value">
									<f:facet name="header">
										<h:graphicImage library="imagens" name="editar16.png"
											style="border:0" />
									</f:facet>
									<h:outputLabel value="Nome:" />
									<h:outputText value="#{usuario.nome}" />
									<h:outputLabel value="CPF:" />
									<h:outputText value="#{usuario.cpf}" />
									<h:outputLabel value="Email:" />
									<h:outputText value="#{usuario.email}" />
									<h:outputLabel value="LOGIN:" />
									<h:outputText value="#{usuario.login}" />
								</h:panelGrid>
							</p:rowExpansion>
						</p:dataTable></div>
					</p:tab>
					<p:tab title="Produtos">Produtos
					
						<div align="center"><h:messages /> <p:dataTable
							value="#{produtoBean.lista}" var="produto" rows="8"
							paginator="true" emptyMessage="Produtos não encontrados"
							style="width:100%">

							<f:facet name="header">
								<h:outputText value="Listagem de Produtos" />
							</f:facet>

							<p:column style="width:16px">
								<p:rowToggler />
							</p:column>

							<p:column>
								<f:facet name="header">Código</f:facet>
								<h:outputText value="#{produto.codigo}" />
							</p:column>

							<p:column>
								<f:facet name="header">Nome</f:facet>
								<h:outputText value="#{produto.nome}" />
							</p:column>

							<p:column>
								<h:commandLink action="#{produtoBean.editar}">
									<h:graphicImage library="imagens" name="edit.png"
										style="border:0" />

									<f:setPropertyActionListener target="#{produtoBean.produto}"
										value="#{produto}" />
									<f:setPropertyActionListener
										target="#{produtoBean.destinoSalvar}" value="/publico/testes" />
								</h:commandLink>

								<h:commandLink action="#{produtoBean.excluir}"
									onclick="if (!confirm('Confirma a exclusão do produto #{produto.nome}?')) return false;">
									<h:graphicImage library="imagens" name="del.png"
										style="border:0" />
									<f:setPropertyActionListener target="#{produtoBean.produto}"
										value="#{produto}" />
								</h:commandLink>
							</p:column>



							<p:rowExpansion>
								<h:panelGrid id="display" columns="2" cellpadding="4"
									style="width:300px;" styleClass="ui-widget-content"
									columnClasses="label, value">
									<f:facet name="header">
									</f:facet>
									<h:outputLabel value="Nome:" />
									<h:outputText value="#{produto.nome}" />
									<h:outputLabel value="NF:" />
									<h:outputText value="#{produto.nf}" />
									<h:outputLabel value="Observação:" />
									<h:outputText value="#{produto.obs}" />
								</h:panelGrid>
							</p:rowExpansion>
						</p:dataTable></div>
					</p:tab>
					<p:tab title="Relatórios">Relatórios</p:tab>
				</p:tabView>

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


</html>

esse cara por exemplo, fica show, com a paginação e listagem funcionando normalmente, mas qdo acesso ao sistema pelo login, e sou direcionando para essa mesma página, ele já não faz mais a paginação e perde tbm os efeitos do <p:rowExpansion>

A

possivelmente seja o nome da importação do seu projeto, o template. Faz o seguinte, coloca no composition assim:

<ui:composition template="/NOMEDOSEUPROJETO/templates/principal.xhtml">

assim ele vai chamar desde a raiz, porque caso o seu login inicie em um nível diferente, ele vai procurar um caminho que não existe.

ederson_js

Cara esse template é o do layout, mas o problema não está nele não, fiz o que você falou e não funcionou, rodei sem os “<ui:” ou seja sem importar nenhum template de layout, só na página branca mesmo, e continuou dando o mesmo erro,estranho demais não ?

bobfroes

Olá,

Tente colocar o “./” no camindo do template para ver o que acontece.

“template=”./template/template.xhtml"

ederson_js
<ui:composition template="./templates/principal.xhtml">

Olá amigo Bobfroes, com a página em teste unitário no raiz do WebContent, continuou rodando normalmente ao alterar, mas já dentro dá pasta admin/ a página nem carregou, deu um erro.

java.io.FileNotFoundException
at org.apache.naming.resources.DirContextURLConnection.getInputStream(DirContextURLConnection.java:381)

bobfroes

Deixe-me ver o código da página “principal.xhtml”.

ederson_js

Brother ! é um template de layout, acho que não está influenciando no problema não por que já fiz uns testes sem ele e continuou dando problema do mesmo jeito, mas vai lá :

<?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:f="http://java.sun.com/jsf/core"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:p="http://primefaces.prime.com.tr/ui">
	
<h:head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	<title><ui:insert name="titulo">ITGSManager</ui:insert></title>
	<h:outputStylesheet library="css" name="estilo.css"/> 
	<style type="text/css"><!--
	#logotipo {
		text-align: center;
	} -->
    </style>
</h:head>
<h:body>
	<div id="container">
		<div id="logotipo">
			<h:graphicImage library="imagens" name="itgs_log2.jpg"/>
		</div>
		<div id="barra_menu">
	    	<ui:insert name="barra_menu"></ui:insert> 
	    		
		</div>
		<div id="corpo">
			<ui:insert name="corpo"/> 
		</div>
		<div id="rodape">
	    	<ui:insert name="rodape">
	    		<ui:include src="/templates/rodape.xhtml"/>
	    	</ui:insert> 
		</div>
	</div>
</h:body>
</html>
bobfroes

Qual é o escopo do seu Bean Gerenciado?

bobfroes

Tente ver o que o Log de erros do servidor de aplicação diz.

ederson_js
package br.com.wsdba24h.web.controle;

import javax.faces.context.FacesContext;
import javax.servlet.RequestDispatcher;


import org.springframework.stereotype.Controller;

import br.com.wsdba24h.web.util.FacesUtil;

@Controller("loginMB")
public class LoginMB {
	
	public LoginMB() {	
	}
	
	public String logar() {
		try {
		    RequestDispatcher dispatcher = FacesUtil.getServletRequest().getRequestDispatcher("/j_spring_security_check");
		    dispatcher.forward(FacesUtil.getServletRequest(), FacesUtil.getServletResponse());
		    FacesContext.getCurrentInstance().responseComplete();
		} catch (Exception ex) {
			FacesUtil.exibirMensagemErro(ex.getMessage());
			return null;
		}
	    return null;
	}
	
	public String logout() {
		FacesUtil.exibirMensagemAlerta("Sessão finalizada com sucesso");
		try {
			RequestDispatcher dispatcher = FacesUtil.getServletRequest().getRequestDispatcher("/j_spring_security_logout");
			dispatcher.forward(FacesUtil.getServletRequest(), FacesUtil.getServletResponse());
			FacesContext.getCurrentInstance().responseComplete();
		} catch (Exception ex) {
			FacesUtil.exibirMensagemErro("Erro ao sair do sistema");
			return null;
		}
		return null;
	}

}
ederson_js

Um faceUtil

package br.com.wsdba24h.web.util;

import java.util.Map;

import javax.faces.application.FacesMessage;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


/**
 * Classe utilitária para desenvolvimento JSF
 */
public class FacesUtil {
	
   
	public static String getRequestParameter(String name) {
		return (String)FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get(name);
	}

	public static void exibirMensagemSucesso(String mensagem) {
		exibirMensagem(FacesMessage.SEVERITY_INFO, mensagem);
	}

	public static void exibirMensagemAlerta(String mensagem) {
		exibirMensagem(FacesMessage.SEVERITY_WARN, mensagem);
	}
	
	public static void exibirMensagemErro(String mensagem) {
		exibirMensagem(FacesMessage.SEVERITY_ERROR, mensagem);
	}
	
	private static void exibirMensagem(FacesMessage.Severity severity, String mensagem) {
		FacesMessage facesMessage = new FacesMessage(severity, "", mensagem);
		FacesContext.getCurrentInstance().addMessage(null, facesMessage);
	}

	public static ExternalContext getExternalContext() {
		return FacesContext.getCurrentInstance().getExternalContext();
	}
	
	public static Map getSessionMap() {
		return FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
	}
	
	public static ServletContext getServletContext() {
		return (ServletContext)FacesContext.getCurrentInstance().getExternalContext().getContext();
	}
	
	public static HttpServletRequest getServletRequest() {
		return (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
	}
	
	public static HttpServletResponse getServletResponse() {
		return (HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse();
	}
		

}
bobfroes

Veja Lá no seu arquivo faces-config.xml algo do tipo.

<managed-bean>
        <managed-bean-name>xxxxController</managed-bean-name>
        <managed-bean-class>pacote.xxxManagedBean</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
</managed-bean>
bobfroes

Provavelmente seu bean gerenciado deve estar como “request”. Se for isto, mude para “view”.

WRYEL

Não sei se estou certo, alguem poderia estar confirmando, mas, ViewScoped o Spring ainda não da suporte :?

Acho que seu Managed Bean está como request scope … Coloque uma anotação no seu managed bean:

import org.springframework.context.annotation.Scope;

@Scope("session")

[]'s

Criado 8 de abril de 2011
Ultima resposta 8 de abr. de 2011
Respostas 15
Participantes 4