selectOneMenu não guarda a pasta da mensagem atual

[quote=renatogalina]Bom dia pessoal, sou iniciante e tenho um problema aqui na empresa com um sistema de mensagens(não é email).
o combo do listOneMenu ele traz as pastas que criei, até ai ok.
Se acessar uma pasta para ler as mensagem e clicar em voltar, tudo bem ele guarda a pasta que eu estava.
O problema é que se eu abrir uma mensagem e muda-la de pasta, ao clicar o combo guarda a pasta que eu movi a mensagem e não a pasta que eu estou ao clicar em voltar. O dataTable fica correto mas o combo não. Exemplo de fluxo, Estou na pasta entrada, leio um mensagem, clico em voltar, dataTable e combo estão na pasta entrada.
estou na pasta entrada, clico numa mensagem, mudo esta para pasta arquivo, clico em voltar, o dataTable esta listando o conteudo da pasta entrada más o combo esta a pasta arquivo( ou seja ele guarda a pasta que eu mudei a mensagem e não a pasta atual onde estou)
Por favor poderia me ajudar com este problema

Segue os códigos

mensagem.jsp

[code]
<%@taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c”%><%@taglib
uri=“http://richfaces.org/rich” prefix=“rich”%><%@taglib
uri=“http://richfaces.org/a4j” prefix=“a4j”%>
<%@ page language=“java” contentType=“text/html; charset=ISO-8859-1” pageEncoding=“ISO-8859-1”%>
<%@ taglib prefix=“f” uri=“http://java.sun.com/jsf/core”%>
<%@ taglib prefix=“h” uri=“http://java.sun.com/jsf/html”%>
<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”>
<html>
<head>
<meta http-equiv=“Content-Type” content=“text/html; charset=ISO-8859-1”>
<title>Marrichi - Consultoria, Motivação, Palestras</title>
<link href=“css/global.css” rel=“stylesheet” type=“text/css” />
<link href=“css/forms.css” rel=“stylesheet” type=“text/css” />
<link href=“css/links.css” rel=“stylesheet” type=“text/css” />
<link href=“css/mensagens.css” rel=“stylesheet” type=“text/css” />
<link href=“css/buscaPastas.css” rel=“stylesheet” type=“text/css” />
<script src=“Scripts/AC_RunActiveContent.js” type=“text/javascript”></script>
</head>
<body>

<f:view>
<div id=“global”>
<div id=“header”><%@include file=“header.jsp”%>
</div>
<div id=“content”>
<div id=“titulos”></div>
<div id=“conteudoInterno”>
<div id=“buscaPasta”>

      	&lt;div id="busca"&gt;
	          		&lt;h:form&gt;
	          			&lt;h:commandLink action="#{mb.mensagemBean.novaMensagem}" &gt;
	          			&lt;h:graphicImage value="img/site/btNovaMensagem.jpg" style="border:0" /&gt;
	          			&lt;f:setPropertyActionListener value="#{null}" target="#{mb.mensagemBean.mensagem}"/&gt;
	          			&lt;/h:commandLink&gt;
	          		&lt;/h:form&gt;
      	&lt;/div&gt;
      	&lt;div id="pastas"&gt;
      		&lt;h:form&gt;
      			&lt;h:panelGroup id="pastas" &gt;
      			
      			&lt;h:selectOneMenu value="#{mb.usuarioMensagemBean.pastaId}" id="combo"&gt;
      				&lt;f:selectItem itemValue="-2" itemLabel="Caixa de Entrada" /&gt;
      				&lt;f:selectItem itemValue="-1" itemLabel="Caixa de Saída" /&gt;
      				&lt;f:selectItem itemValue="0" itemLabel="Todas Mensagens" /&gt;
      				&lt;f:selectItems value="#{mb.pastaMensagemBean.pastasItens}" /&gt;
      				&lt;a4j:support event="onchange" action="#{mb.usuarioMensagemBean.filtrarPorPasta}" reRender="messagesTable" /&gt;
      			&lt;/h:selectOneMenu&gt;&nbsp;&nbsp;
      			
      		
      			&lt;a4j:commandButton value="Criar Pasta" &gt;
      				&lt;f:setPropertyActionListener target="#{mb.pastaMensagemBean.pasta}" value="#{null}"&gt;&lt;/f:setPropertyActionListener&gt;
      				&lt;rich:componentControl event="oncomplete" for="pastaPanel" operation="show" /&gt;
      			&lt;/a4j:commandButton&gt;
      			&lt;a4j:commandButton value="Excluir Pasta" &gt;
      				&lt;rich:componentControl event="oncomplete" for="pastaDeletePanel" operation="show" /&gt;
      			&lt;/a4j:commandButton&gt;
      			&lt;/h:panelGroup&gt;
      		&lt;/h:form&gt;
      	&lt;/div&gt;
      &lt;/div&gt;
      
      
      &lt;div id="buscas"&gt;
		   &lt;rich:panel style="width: 845px;"&gt;
			&lt;f:facet name="header"&gt;&lt;h:outputText value="Buscas"/&gt;&lt;/f:facet&gt;
	
		    &lt;h:form&gt;
				&lt;h:panelGrid columns="7" styleClass="bordasimples"&gt;
				&lt;rich:column width="200"&gt;&lt;h:outputText value="Buscar por Título " /&gt;&lt;/rich:column&gt;
				&lt;rich:column width="100"&gt;&lt;h:inputText value="#{mb.usuarioMensagemBean.filtro}"&gt;&lt;/h:inputText&gt;&lt;/rich:column&gt;
				&lt;rich:column width="40"&gt;&lt;h:commandButton value="Filtrar" action="#{mb.usuarioMensagemBean.buscarAssunto}"/&gt;&lt;/rich:column&gt;
				&lt;rich:column width="50" /&gt;
				&lt;rich:column width="200"&gt;&lt;h:outputText value="Buscar por Conteúdo" /&gt;&lt;/rich:column&gt;
				&lt;rich:column width="100"&gt;&lt;h:inputText value="#{mb.usuarioMensagemBean.filtro}"&gt;&lt;/h:inputText&gt;&lt;/rich:column&gt;
				&lt;rich:column width="40"&gt;&lt;h:commandButton value="Filtrar" action="#{mb.usuarioMensagemBean.buscarMensagem}"/&gt;&lt;/rich:column&gt;
				&lt;/h:panelGrid&gt;
			&lt;/h:form&gt;
			&lt;/rich:panel&gt;			
		&lt;/div&gt;	
      
      
      	&lt;div id="conteudoMensagens"&gt;
      	
     	
      		&lt;h:form&gt;
				&lt;rich:dataTable id="messagesTable" value="#{mb.usuarioMensagemBean.paginator}" var="um" rows="10" width="850" &gt;
					&lt;f:facet name="header"&gt;
						&lt;h:outputText value="Mensagens: #{mb.usuarioMensagemBean.filtroPasta}" &gt;&lt;/h:outputText&gt;
					&lt;/f:facet&gt;
					&lt;rich:column&gt;
						&lt;h:selectBooleanCheckbox value="#{um.selected}" /&gt;
							&lt;h:outputText value="#{um.mensagem.dataCadastro}" styleClass="dataMensagens" &gt;
								&lt;f:convertDateTime pattern="dd/MM/yyyy HH:mm:ss" /&gt;
							&lt;/h:outputText&gt;<br />
						&lt;h:commandLink action="#{mb.usuarioMensagemBean.lerAdmin}" &gt;
							&lt;h:outputText value="#{um.mensagem.usuario.nomeResponsavel} - " &gt;&lt;/h:outputText&gt;
							&lt;h:outputText value="#{um.mensagem.usuario.nome} - " &gt;&lt;/h:outputText&gt;
							&lt;h:outputText value="#{um.mensagem.assunto}" &gt;&lt;/h:outputText&gt;
							&lt;f:setPropertyActionListener value="#{um}" target="#{mb.usuarioMensagemBean.usuarioMensagem}"/&gt;
						&lt;/h:commandLink&gt;
					&lt;/rich:column&gt;
					
					&lt;rich:column dir="RTL" width="35" &gt;
						&lt;h:panelGroup rendered="#{um.remetente}" &gt;
							&lt;h:commandLink id="verLink" action="#{mb.usuarioMensagemBean.verQuemLeu}" &gt;
								&lt;f:setPropertyActionListener value="#{um}" target="#{mb.usuarioMensagemBean.usuarioMensagem}"/&gt;
								&lt;h:graphicImage alt="Lidas"  url="img/site/checar.png" &gt;&lt;/h:graphicImage&gt;
							&lt;/h:commandLink&gt;
							&lt;rich:toolTip for="verLink" value="Checar quais usuários já leram a mensagem" &gt;&lt;/rich:toolTip&gt;
						&lt;/h:panelGroup&gt;
					&lt;/rich:column&gt;
					
					&lt;rich:column dir="RTL" width="35" &gt;
						&lt;h:panelGroup rendered="#{um.remetente}" &gt;
							&lt;h:commandLink id="verLinkNao" action="#{mb.usuarioMensagemBean.verQuemNaoLeu}" &gt;
								&lt;f:setPropertyActionListener value="#{um}" target="#{mb.usuarioMensagemBean.usuarioMensagem}"/&gt;
								&lt;h:graphicImage alt="Não Lidas"  url="img/site/checarNao.png" &gt;&lt;/h:graphicImage&gt;
							&lt;/h:commandLink&gt;
							&lt;rich:toolTip for="verLinkNao" value="Checar quais usuários ainda não leram a mensagem" &gt;&lt;/rich:toolTip&gt;
						&lt;/h:panelGroup&gt;
					&lt;/rich:column&gt;
					
					&lt;rich:column dir="RTL" width="20" &gt;
						&lt;h:panelGroup &gt;
							&lt;a4j:commandLink id="deletelink" oncomplete="#{rich:component('deletePanel')}.show()"&gt;
								&lt;h:graphicImage alt="Deletar"  url="../pages/img/geral/delete.gif" &gt;&lt;/h:graphicImage&gt;
								&lt;f:setPropertyActionListener value="#{um}" target="#{mb.usuarioMensagemBean.usuarioMensagem}"/&gt;
							&lt;/a4j:commandLink&gt;
							&lt;rich:toolTip for="deleteLink" value="Excluir" ajaxSingle="true" &gt;&lt;/rich:toolTip&gt;
						&lt;/h:panelGroup&gt;
					&lt;/rich:column&gt;
					
					&lt;f:facet name="footer"&gt;
						&lt;rich:datascroller for="messagesTable" maxPages="10" page="#{mb.usuarioMensagemBean.pageNumber}" actionListener="#{mb.usuarioMensagemBean.event}" &gt;
						&lt;/rich:datascroller&gt;
					&lt;/f:facet&gt;
				
				&lt;/rich:dataTable&gt;
				&lt;h:commandButton action="#{mb.usuarioMensagemBean.deleteMany}" value="Excluir Selecionadas" /&gt;
			&lt;/h:form&gt;
			
		&lt;rich:modalPanel id="pastaPanel" autosized="true" width="200"&gt;
			&lt;f:facet name="header"&gt;
				&lt;h:outputText value="Nova Pasta"
					style="padding-right:15px;" /&gt;
			&lt;/f:facet&gt;
			&lt;f:facet name="controls"&gt;
				&lt;h:panelGroup&gt;
					&lt;h:graphicImage value="../pages/img/geral/close.png"
						styleClass="hidelink" id="hidelink3" /&gt;
					&lt;rich:componentControl for="pastaPanel" attachTo="hidelink3"
						operation="hide" event="onclick" /&gt;
				&lt;/h:panelGroup&gt;
			&lt;/f:facet&gt;
			&lt;h:form&gt;
				&lt;a4j:outputPanel ajaxRendered="true" &gt;
				&lt;h:outputText value="Nome: " /&gt;
				&lt;h:inputText immediate="true" id="pastaNome" value="#{mb.pastaMensagemBean.pasta.nome}" required="true" /&gt;
				&lt;h:message for="pastaNome" /&gt;
				<br />
				&lt;/a4j:outputPanel&gt;
				&lt;a4j:commandButton value="Salvar" action="#{mb.pastaMensagemBean.storePasta}" reRender="pastas" oncomplete="if (#{facesContext.maximumSeverity==null}) #{rich:component('pastaPanel')}.hide();"&gt;
				
				&lt;/a4j:commandButton&gt;
			&lt;/h:form&gt;
		&lt;/rich:modalPanel&gt;
		
		
		&lt;rich:modalPanel id="pastaDeletePanel" height="400" width="300"&gt;
			&lt;f:facet name="header"&gt;
				&lt;h:outputText value="Nova Pasta"
					style="padding-right:15px;" /&gt;
			&lt;/f:facet&gt;
			&lt;f:facet name="controls"&gt;
				&lt;h:panelGroup&gt;
					&lt;h:graphicImage value="../pages/img/geral/close.png"
						styleClass="hidelink" id="hidelink4" /&gt;
					&lt;rich:componentControl for="pastaDeletePanel" attachTo="hidelink4"
						operation="hide" event="onclick" /&gt;
				&lt;/h:panelGroup&gt;
			&lt;/f:facet&gt;
			&lt;h:form&gt;
			
				&lt;a4j:outputPanel ajaxRendered="true" &gt;
					&lt;rich:messages globalOnly="true" &gt;&lt;/rich:messages&gt;
					&lt;rich:scrollableDataTable value="#{mb.pastaMensagemBean.pastas}" var="pasta" id="pastaList" height="300px" width="250px" &gt;
						&lt;rich:column width="180px" &gt;
							&lt;f:facet name="header"&gt;
								&lt;h:outputText value="Nome" /&gt;
							&lt;/f:facet&gt;
							&lt;h:outputText value="#{pasta.nome}" /&gt;
						&lt;/rich:column&gt;
						&lt;rich:column width="50px" &gt;
							&lt;f:facet name="header"&gt;
								&lt;h:outputText value="Excluir" /&gt;
							&lt;/f:facet&gt;
							&lt;a4j:commandButton image="/pages/img/geral/delete.gif"  action="#{mb.pastaMensagemBean.delete}" reRender="pastaList,pastas" &gt;
								&lt;f:setPropertyActionListener value="#{pasta}" target="#{mb.pastaMensagemBean.pasta}"&gt;&lt;/f:setPropertyActionListener&gt;
							&lt;/a4j:commandButton&gt;
						&lt;/rich:column&gt;
					
					&lt;/rich:scrollableDataTable&gt;
				
				&lt;/a4j:outputPanel&gt;
			&lt;/h:form&gt;
		&lt;/rich:modalPanel&gt;
		
		
		
			&lt;!-- Início modalPanel para delete de produto --&gt;
		&lt;rich:modalPanel id="deletePanel" autosized="true" width="200"&gt;
			&lt;f:facet name="header"&gt;
				&lt;h:outputText value="Deletar a mensagem?"
					style="padding-right:15px;" /&gt;
			&lt;/f:facet&gt;
			&lt;f:facet name="controls"&gt;
				&lt;h:panelGroup&gt;
					&lt;h:graphicImage value="../pages/img/geral/close.png"
						styleClass="hidelink" id="hidelink2" /&gt;
					&lt;rich:componentControl for="deletePanel" attachTo="hidelink2"
						operation="hide" event="onclick" /&gt;
				&lt;/h:panelGroup&gt;
			&lt;/f:facet&gt;
			&lt;h:form&gt;
				&lt;table width="100%"&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td align="center" width="50%"&gt;&lt;a4j:commandButton
								value="Sim" ajaxSingle="true"
								action="#{mb.usuarioMensagemBean.deletar}"
								oncomplete="#{rich:component('deletePanel')}.hide();"
								reRender="messagesTable" /&gt;&lt;/td&gt;
							&lt;td align="center" width="50%"&gt;&lt;a4j:commandButton
								value="Cancelar"
								onclick="#{rich:component('deletePanel')}.hide();return false;" /&gt;
							&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/h:form&gt;
		&lt;/rich:modalPanel&gt;
		&lt;!-- Fim modalPanel para delete de produto --&gt;
      	&lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;

</div>
<div id=“footer”><div id=“logoTi”></div></div>

</f:view>
</body>
</html>[/code]

mensagens-read.jsp

&lt;%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%&gt;&lt;%@taglib
	uri="http://richfaces.org/rich" prefix="rich"%&gt;&lt;%@taglib
	uri="http://richfaces.org/a4j" prefix="a4j"%&gt;
&lt;%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%&gt;
&lt;%@ taglib prefix="f"  uri="http://java.sun.com/jsf/core"%&gt;
&lt;%@ taglib prefix="h"  uri="http://java.sun.com/jsf/html"%&gt;
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"&gt;
&lt;title&gt;Marrichi - Consultoria, Motiva&ccedil;&atilde;o, Palestras&lt;/title&gt;
&lt;link href="css/global.css" rel="stylesheet" type="text/css" /&gt;
&lt;link href="css/forms.css" rel="stylesheet" type="text/css" /&gt;
&lt;link href="css/links.css" rel="stylesheet" type="text/css" /&gt;
&lt;link href="css/mensagens.css" rel="stylesheet" type="text/css" /&gt;
&lt;script src="Scripts/AC_RunActiveContent.js" type="text/javascript"&gt;&lt;/script&gt;

&lt;script type="text/javascript" src="editor/js/editor/tiny_mce.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="editor/js/editor-config.js"&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;f:view&gt;
	&lt;div id="global"&gt;
   	  &lt;div id="header"&gt;&lt;%@include file="header.jsp"%&gt;
      &lt;/div&gt;
        &lt;div id="content"&gt;
          &lt;div id="titulos"&gt;<img     />&lt;/div&gt;
          &lt;div id="conteudoInterno"&gt;
          &lt;div id="conteudoMensagens"&gt;
          	&lt;h:outputText value="#{mb.usuarioMensagemBean.message} " id="msg" &gt;&lt;/h:outputText&gt;
		          	&lt;div id="botaoVoltar"&gt;
			          	&lt;h:outputLink value="mensagens.jsf" &gt;		
							&lt;h:graphicImage value="img/site/btVoltar.jpg" style="border:0" /&gt;		
						&lt;/h:outputLink&gt;
					&lt;/div&gt;
						&lt;h:form&gt;
							&lt;h:panelGroup  &gt;
								&lt;h:outputText value="Pasta: " &gt;&lt;/h:outputText&gt;
								&lt;h:selectOneMenu immediate="true" id="switchFolder" value="#{mb.usuarioMensagemBean.pastaId}"&gt;
									&lt;f:selectItem itemValue="" itemLabel="" /&gt;
									&lt;f:selectItems value="#{mb.pastaMensagemBean.pastasItens}" &gt;&lt;/f:selectItems&gt;
									&lt;a4j:support event="onchange" action="#{mb.usuarioMensagemBean.switchPasta}" reRender="msg"  /&gt;
								&lt;/h:selectOneMenu&gt;
								&lt;rich:message for="switchFolder" &gt;&lt;/rich:message&gt;
							&lt;/h:panelGroup&gt;
						&lt;/h:form&gt;
					&lt;h:form&gt;
						&lt;rich:messages&gt;&lt;/rich:messages&gt;
						&lt;rich:panel &gt;
							&lt;h:commandLink action="#{mb.usuarioMensagemBean.verOriginal}" value="Ver mensagem original" rendered="#{mb.usuarioMensagemBean.usuarioMensagem.mensagem.resposta}" /&gt;
							&lt;h:panelGrid columns="2" &gt;
								&lt;h:outputText  value="De:" &gt;&lt;/h:outputText&gt;	
								&lt;h:outputText value="#{mb.usuarioMensagemBean.mensagem.usuario.nomeResponsavel}" &gt;&lt;/h:outputText&gt;		
								&lt;h:outputText value="Assunto:" &gt;&lt;/h:outputText&gt;		
								&lt;h:outputText value="#{mb.usuarioMensagemBean.mensagem.assunto}" &gt;&lt;/h:outputText&gt;		
								&lt;h:outputText rendered="#{mb.usuarioMensagemBean.mensagem.temAnexo}" value="Anexo:" &gt;&lt;/h:outputText&gt;
								&lt;h:outputLink rendered="#{mb.usuarioMensagemBean.mensagem.temAnexo}" value="../anexos/#{mb.usuarioMensagemBean.mensagem.urlAnexo}" target="_blank" &gt;Baixar Anexo&lt;/h:outputLink&gt;		
								&lt;h:outputText value="Data:" &gt;&lt;/h:outputText&gt;		
								&lt;h:outputText value="#{mb.usuarioMensagemBean.mensagem.dataCadastro}" &gt;
									&lt;f:convertDateTime pattern="dd/MM/yyyy HH:mm:ss" /&gt;
								&lt;/h:outputText&gt;
							&lt;/h:panelGrid&gt;
							&lt;h:outputText escape="false" value="#{mb.usuarioMensagemBean.mensagem.mensagem}" &gt;&lt;/h:outputText&gt;
							<br />
							&lt;h:commandButton value="Replicar a todos" action="#{mb.usuarioMensagemBean.replyToAll}" &gt;&lt;/h:commandButton&gt;	<br />
							&lt;h:commandButton value="Enviar como mensagem" action="#{mb.usuarioMensagemBean.toMessage}" &gt;
									&lt;f:setPropertyActionListener value="#{mb.usuarioMensagemBean.mensagem}" target="#{mb.mensagemBean.mensagem}"/&gt;
								&lt;/h:commandButton&gt;
						&lt;/rich:panel&gt;
						respostas:
						&lt;h:dataTable value="#{mb.usuarioMensagemBean.respostas}" var="resposta" &gt;
							&lt;h:column&gt;
							&lt;rich:panel &gt;
								&lt;h:panelGrid columns="2" &gt;
									&lt;h:outputText value="De: " &gt;&lt;/h:outputText&gt;		
									&lt;h:outputText value="#{resposta.mensagem.usuario.nomeResponsavel}" /&gt;
									&lt;h:outputText rendered="#{resposta.mensagem.temAnexo}" value="Anexo:" &gt;&lt;/h:outputText&gt;
									&lt;h:outputLink rendered="#{resposta.mensagem.temAnexo}" value="../anexos/#{resposta.mensagem.urlAnexo}" target="_blank" &gt;Baixar Anexo&lt;/h:outputLink&gt;		
									&lt;h:outputText value="Data: " &gt;&lt;/h:outputText&gt;		
									&lt;h:outputText value="#{resposta.mensagem.dataCadastro}" &gt;
										&lt;f:convertDateTime pattern="dd/MM/yyyy HH:mm:ss" /&gt;
									&lt;/h:outputText&gt;
								&lt;/h:panelGrid&gt;
								&lt;h:outputText escape="false" value="#{resposta.mensagem.mensagem}" &gt;&lt;/h:outputText&gt;
								<br />
								&lt;h:commandButton value="Replicar" action="#{mb.usuarioMensagemBean.reply}" &gt;
									&lt;f:setPropertyActionListener value="#{resposta.mensagem}" target="#{mb.usuarioMensagemBean.respostaResponder}" /&gt;
								&lt;/h:commandButton&gt;	
								&lt;h:commandButton value="Enviar como mensagem" action="#{mb.usuarioMensagemBean.toMessage}" &gt;
									&lt;f:setPropertyActionListener value="#{resposta.mensagem}" target="#{mb.mensagemBean.mensagem}"/&gt;
								&lt;/h:commandButton&gt;	
							&lt;/rich:panel&gt;
							&lt;/h:column&gt;
						&lt;/h:dataTable&gt;
					&lt;/h:form&gt;
				&lt;/div&gt;
          &lt;/div&gt;
   	    &lt;/div&gt;
&lt;/div&gt;
&lt;div id="footer"&gt;&lt;div id="logoTi"&gt;<img   />&lt;/div&gt;&lt;/div&gt;


&lt;/f:view&gt;
&lt;/body&gt;
&lt;/html&gt;

UsuarioMensagemBean.java

package com.tischeme.marrichi.bean;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.faces.event.ActionEvent;

import org.richfaces.event.DataScrollerEvent;
import org.richfaces.event.UploadEvent;
import org.richfaces.model.UploadItem;

import com.tischeme.marrichi.bean.main.ManagedBean;
import com.tischeme.marrichi.bean.to.Diretorio;
import com.tischeme.marrichi.controller.FileTransfer;
import com.tischeme.marrichi.controller.MensagemController;
import com.tischeme.marrichi.controller.PastaController;
import com.tischeme.marrichi.controller.UsuarioMensagemController;
import com.tischeme.marrichi.exception.DatabaseException;
import com.tischeme.marrichi.exception.NoResultFoundException;
import com.tischeme.marrichi.paginators.UsuarioMensagemPaginator;
import com.tischeme.marrichi.persistence.dao.PastaDAO;
import com.tischeme.marrichi.persistence.to.Mensagem;
import com.tischeme.marrichi.persistence.to.Pasta;
import com.tischeme.marrichi.persistence.to.UsuarioMensagem;
import com.tischeme.marrichi.persistence.util.MessageHandler;

public class UsuarioMensagemBean {
	
	private List&lt;String&gt; gruposSelecionados = new ArrayList&lt;String&gt;();
	
	private String usuarios = "";
	
	private MensagemController controller;
	
	private UsuarioMensagemController usuarioMensagemController;
	
	private String message;
	
	private List&lt;UsuarioMensagem&gt; naoLeitores;
	private List&lt;UsuarioMensagem&gt; leitores;
	
	private Mensagem mensagem;

	private UsuarioMensagem usuarioMensagem;
	
	private List&lt;UsuarioMensagem&gt; respostas;
	
	private Mensagem resposta2;
	
	private Mensagem respostaResponder;
	
	private boolean resposta = false;
	
	private boolean toAll = false;
	
	private String filtro;
	
	private Pasta pasta;
	
	private int pastaId = -2;

	private String filtroPasta;
	
	private UsuarioMensagemPaginator paginator;
	
	private boolean anexado = false;
	
	private int pageNumber = 1;
	
	public String loadMessageAdmin() throws DatabaseException{
		pastaId = -2;
		filtrarPorPasta();
		return &quot;loadMessageAdmin&quot;;
	}
	public String loadMessage() throws DatabaseException{
		pastaId = -2;
		filtrarPorPasta();		
		return &quot;loadMessage&quot;;
	}
	
	
	/**
	 * Exclui várias mensagens que estão selecionadas
	 * @return null
	 * @throws DatabaseException caso ocorra alguma anormalidade na execução
	 */
	public String deleteMany() throws DatabaseException{
		
		for (UsuarioMensagem um : getPaginator().getUsuarioMensagens()) {
			if(um.isSelected()){
				getUsuarioMensagemController().delete(um);
			}
		}
		
		return null;
	}
	/**
	 * Busca mensagem por assunto
	 * @return
	 * @throws DatabaseException
	 */
	public String buscarAssunto() throws DatabaseException{
		getUsuarioMensagemController().findByAssunto(ManagedBean.getLoggedUser(), filtro);
		return &quot;&quot;;
	}
	public String buscarMensagem() throws DatabaseException{
		getUsuarioMensagemController().findByMensagem(ManagedBean.getLoggedUser(), filtro);
		return &quot;&quot;;
	}
	
	/**
	 * Filtra mensagens por pasta
	 * @return
	 * @throws DatabaseException
	 */
	public String filtrarPorPasta() throws DatabaseException{
		pageNumber = 1;
		if(pastaId &gt; 0){
			pasta = new PastaController(Mensagem.MENSAGEM).findById(pastaId);
			filtroPasta = pasta.getNome();
			getUsuarioMensagemController().findByPasta(ManagedBean.getLoggedUser(), pasta);
		}else{
			if(pastaId == 0){
				buscarTodas();
			}else if(pastaId == -1){
				filtrarEnviadas();
			}else if(pastaId == -2){
				filtrarRecebidas();
			}
		}
		return null;
	}

	/**
	 * Filtra apenas as mensagens recebidas
	 * @return
	 * @throws DatabaseException
	 */
	public String filtrarRecebidas() throws DatabaseException{
		this.pasta = new Pasta();
		this.pastaId = -2;
		filtroPasta = &quot;Recebidas&quot;;
		getUsuarioMensagemController().findRecebidas(ManagedBean.getLoggedUser());
		return null;
	}
	
	private String buscarTodas() throws DatabaseException{
		this.pasta = new Pasta();
		this.pastaId = 0;
		filtroPasta = &quot;Todas&quot;;
		getUsuarioMensagemController().findByUser(ManagedBean.getLoggedUser());
		return null;
	}
	
	
	/**
	 * Filtra apenas as mensagens enviadas
	 * @return
	 * @throws DatabaseException
	 */
	public String filtrarEnviadas() throws DatabaseException{
		this.pasta = new Pasta();
		this.pastaId = -1;
		filtroPasta = &quot;Enviadas&quot;;
		getUsuarioMensagemController().findEnviadas(ManagedBean.getLoggedUser());
		return null;
	}
	
	/**
	 * Envia uma resposta a uma mensagem, neste caso como administrador
	 * @return
	 */
	public String enviarRespostaAdmin() {
		if(ManagedBean.getLoggedUser() != null && getMensagem() != null){
			resposta2.setDataCadastro(new Date());
			resposta2.setUsuario(ManagedBean.getLoggedUser());
			if(toAll){
				resposta2.setMensagemOriginal(getMensagem());
			}else{
				resposta2.setMensagemOriginal(getRespostaResponder());
			}
			resposta2.setAssunto(getMensagem().getAssunto());
			
			try{
				getController().sendResponse(resposta2, toAll, usuarios, gruposSelecionados);
				message = &quot;Resposta enviada com sucesso.&quot;;
				resposta = false;
				resposta2 = null;
				anexado = false;
				usuarios = &quot;&quot;;
				gruposSelecionados = new ArrayList&lt;String&gt;();
				return "ok";
			} catch (DatabaseException e) {
				e.printStackTrace();
				message = "Envio de resposta falhou";
			}
			
		}else{
			message = "Envio de resposta falhou";
		}
		
		return "";
	}
	
	/**
	 * Envia a resposta a uma mensagem, usuário comum
	 * @return
	 */
	public String enviarResposta() {
		if(getUsuarioMensagem().getUsuario() != null && getUsuarioMensagem().getMensagem() != null){
			
			// Quando o usuário envia a mensagem de respostas, ela vai somente para o administrador
			resposta2.setDataCadastro(new Date());
			resposta2.setUsuario(ManagedBean.getLoggedUser());
			resposta2.setAssunto(getUsuarioMensagem().getMensagem().getAssunto());
			resposta2.setMensagemOriginal(getUsuarioMensagem().getMensagem());
			
			
			try{
				getController().sendResponse(resposta2, false,null,null);
				message = "Resposta enviada com sucesso.";
				resposta = false;
				resposta2 = null;
				anexado = false;
			} catch (DatabaseException e) {
				e.printStackTrace();
				message = "Envio de resposta falhou";
			}
			
		}else{
			message = "Envio de resposta falhou";
		}
		
		return "";
	}
	
	/**
	 * Somente retorna a string, para fim de redirecionamento
	 * @return
	 */
	public String toMessage() {
		return "message";
	}
	/**
	 * Somente retorna a string, para fim de redirecionamento
	 * @return
	 */
	public String responder(){
		resposta = true;
		return null;
	}
	
	
	/**
	 * Define os parâmetros necessários para a leitura de uma mensagem
	 * @return uma string de redirecionamento
	 */
	public String ler() throws DatabaseException{
		if(usuarioMensagem != null && usuarioMensagem.isLida() == false){
			usuarioMensagem.setLida(true);
			usuarioMensagem.setDataLeitura(new Date());
			getUsuarioMensagemController().update(usuarioMensagem);
		}
		resposta = false;
		message = "";
		return "ler";
	}
	
	/**
	 * Define os parâmetros necessários para a leitura de uma mensagem (administrador)
	 * @return uma string de redirecionamento
	 */
	public String lerAdmin() {
		
		resposta = false;
		message = "";
		return "ler";
	}
	
	/**
	 * Exclui uma mensagem (usuarioMensagem)
	 * @return
	 * @throws DatabaseException
	 */
	public String deletar() throws DatabaseException{
		getUsuarioMensagemController().delete(usuarioMensagem);
		//getUsuarioMensagemController().findByUser(ManagedBean.getLoggedUser());
		return "";
	}
	
	/**
	 * Exclui a mensagem
	 * @return
	 * @throws DatabaseException
	 */
	public String deletarAdmin() throws DatabaseException{
		getController().delete(mensagem);
		//getUsuarioMensagemController().findByUser(ManagedBean.getLoggedUser());
		return "";
	}
	
	/**
	 * Monta uma lista contendo os usuários que não leram certa mensagem
	 * @return
	 * @throws DatabaseException
	 */
	public String verQuemNaoLeu() throws DatabaseException{
		naoLeitores = getUsuarioMensagemController().buscarNaoLeitores(mensagem);
		return "naoleitores";
	}
	
	/**
	 * Monta uma lista contendo os usuários que leram certa mensagem
	 * @return
	 * @throws DatabaseException
	 */
	public String verQuemLeu() throws DatabaseException{
		leitores = getUsuarioMensagemController().buscarLeitores(mensagem);
		return "leitores";
	}
	
	/**
	 * Redirecionameto para resposta
	 * @return
	 */
	public String reply(){
		anexado = false;
		toAll = false;
		return "reply";
	}
	/**
	 * Redirecionameto para resposta (para todos)
	 * @return
	 */
	public String replyToAll(){
		anexado = false;
		toAll = true;
		return "reply";
	}
	
	/**
	 * Troca a pasta de uma mensagem
	 * @return
	 * @throws DatabaseException
	 */
	public String switchPasta() throws DatabaseException{
		
		usuarioMensagem.setPasta(getPastaId() != 0 ? new PastaDAO().findById(getPastaId()) : null );
		
		getUsuarioMensagemController().update(usuarioMensagem);
		
		message = "Mensagem movida para a pasta ";
		
		message += usuarioMensagem.getPasta() == null ? "Sem pasta" : usuarioMensagem.getPasta().getNome();
		
		return null;
	}
	public String verOriginal() throws DatabaseException{
		UsuarioMensagem mensagemOriginal = null;
		try{
			mensagemOriginal = getUsuarioMensagemController().findByUsuarioMensagem(usuarioMensagem.getMensagem().getMensagemOriginal().getId(), ManagedBean.getLoggedUser().getId());
		} catch (NoResultFoundException e) {
			MessageHandler.addGlobalMessage(e.getMessage());
		}
		if (mensagemOriginal != null) {
			setUsuarioMensagem(mensagemOriginal);
		}
		return "original";
	}
	
	/***
	 * Upload Listener
	 * @param event
	 * @throws Exception
	 */
	public void listener(UploadEvent event) throws Exception {
		UploadItem item = event.getUploadItem();
		int extDot = item.getFileName().lastIndexOf('.');
		String extension = item.getFileName().substring(extDot);
		
		FileTransfer fileTransfer = new FileTransfer();
		String fileStored = fileTransfer.transfer(item.getFile(), extension, Diretorio.ANEXO);
		
		System.out.println(fileStored);

		getResposta2().setUrlAnexo(fileStored);
		
		anexado = true;
	}
	
	
	// GETTERS AND SETTERS:	
	/**
	 * @return the mensagem
	 */
	public Mensagem getMensagem() {
		if (mensagem == null) {
			mensagem = new Mensagem();
		}
		return mensagem;
	}

	/**
	 * @param mensagem the mensagem to set
	 */
	public void setMensagem(Mensagem mensagem) {
		this.mensagem = mensagem;
	}

	/**
	 * @return the controller
	 */
	private MensagemController getController() {
		if(controller == null){
			controller = new MensagemController(Mensagem.MENSAGEM);
		}
		return controller;
	}


	/**
	 * @return the usuarioMensagemController
	 * @throws DatabaseException 
	 */
	private UsuarioMensagemController getUsuarioMensagemController() throws DatabaseException {
		if (usuarioMensagemController == null) {
			usuarioMensagemController = new UsuarioMensagemController(Mensagem.MENSAGEM);
		}
		return usuarioMensagemController;
	}


	
	/**
	 * @return the usuarioMensagem
	 */
	public UsuarioMensagem getUsuarioMensagem() {
		if (usuarioMensagem == null) {
			usuarioMensagem = new UsuarioMensagem();
		}
		return usuarioMensagem;
	}


	/**
	 * @param usuarioMensagem the usuarioMensagem to set
	 */
	public void setUsuarioMensagem(UsuarioMensagem usuarioMensagem) {
		if(usuarioMensagem.getPasta() != null){
			this.pasta = usuarioMensagem.getPasta();
			this.pastaId = usuarioMensagem.getPasta().getId();
		}else{
			this.pasta = new Pasta();
			//this.pastaId = 0;
		}
		this.usuarioMensagem = usuarioMensagem;
		this.mensagem = usuarioMensagem.getMensagem();
		
	}


	/**
	 * @return the resposta
	 */
	public boolean isResposta() {
		return resposta;
	}


	/**
	 * @return the email
	 */
	public Mensagem getResposta2() {
		if (resposta2 == null) {
			resposta2 = new Mensagem();
		}
		return resposta2;
	}


	/**
	 * @param email the email to set
	 */
	public void setResposta2(Mensagem resposta2) {
		this.resposta2 = resposta2;
	}


	/**
	 * @return the message
	 */
	public String getMessage() {
		return message;
	}


	/**
	 * @return the naoLeitores
	 */
	public List&lt;UsuarioMensagem&gt; getNaoLeitores() {
		if(naoLeitores == null){
			naoLeitores = new ArrayList&lt;UsuarioMensagem&gt;();
		}
		return naoLeitores;
	}


	/**
	 * @return the leitores
	 */
	public List&lt;UsuarioMensagem&gt; getLeitores() {
		if(leitores == null){
			leitores = new ArrayList&lt;UsuarioMensagem&gt;();
		}
		return leitores;
	}


	/**
	 * @return the respostas
	 * @throws DatabaseException 
	 */
	public List&lt;UsuarioMensagem&gt; getRespostas() throws DatabaseException {
		if (usuarioMensagem != null && ManagedBean.getLoggedUser() != null) {
			respostas = getUsuarioMensagemController().pegarRespostas(getUsuarioMensagem().getMensagem(), ManagedBean.getLoggedUser());
		}
		return respostas;
	}


	/**
	 * @return the respostaResponder
	 */
	public Mensagem getRespostaResponder() {
		return respostaResponder;
	}


	/**
	 * @param respostaResponder the respostaResponder to set
	 */
	public void setRespostaResponder(Mensagem respostaResponder) {
		this.message = "";
		this.respostaResponder = respostaResponder;
	}

	/**
	 * @return the toAll
	 */
	public boolean isToAll() {
		return toAll;
	}

	public Pasta getPasta() {
		return pasta == null ? pasta = new Pasta() : pasta;
	}

	public void setPasta(Pasta pasta) {
		this.pasta = pasta;
	}

	public String getFiltroPasta() {
		return filtroPasta == null ? filtroPasta = "Recebidas" : filtroPasta;
	}

	public int getPastaId() {
		return pastaId;
	}

	public void setPastaId(int pastaId) {
		this.pastaId = pastaId;
	}
	public String getFiltro() {
		return filtro;
	}

	public void setFiltro(String filtro) {
		this.filtro = filtro;
	}

	public boolean isAnexado() {
		return anexado;
	}
	public List&lt;String&gt; getGruposSelecionados() {
		return gruposSelecionados;
	}
	public void setGruposSelecionados(List&lt;String&gt; gruposSelecionados) {
		this.gruposSelecionados = gruposSelecionados;
	}
	public String getUsuarios() {
		return usuarios;
	}
	public void setUsuarios(String usuarios) {
		this.usuarios = usuarios;
	}
	/**
	 * @return the paginator
	 * @throws DatabaseException 
	 */
	public UsuarioMensagemPaginator getPaginator() throws DatabaseException {
		return paginator == null ? paginator = new UsuarioMensagemPaginator(getUsuarioMensagemController()) : paginator;
	}
	
	public void event(ActionEvent event){
		DataScrollerEvent scrollerEvent = (DataScrollerEvent)event;
		pageNumber = scrollerEvent.getPage();
	}
	/**
	 * @return the pageNumber
	 */
	public int getPageNumber() {
		return pageNumber;
	}
	/**
	 * @param pageNumber the pageNumber to set
	 */
	public void setPageNumber(int pageNumber) {
		this.pageNumber = pageNumber;
	}
	

}

PastaController.java

package com.tischeme.marrichi.controller;

import java.util.List;

import com.tischeme.marrichi.bean.main.ManagedBean;
import com.tischeme.marrichi.exception.DatabaseException;
import com.tischeme.marrichi.persistence.dao.PastaDAO;
import com.tischeme.marrichi.persistence.dao.UsuarioMensagemDAO;
import com.tischeme.marrichi.persistence.to.Pasta;
import com.tischeme.marrichi.persistence.to.TipoMensagem;
import com.tischeme.marrichi.persistence.to.Usuario;

public class PastaController {
	
	private PastaDAO pastaDAO;
	
	private int tipoMensagem;
	
	public PastaController(int tipoMensagem) {
		this.tipoMensagem = tipoMensagem;
	}
	
	public List&lt;Pasta&gt; listPastas(Usuario usuario) throws DatabaseException{
		return getPastaDAO().findByUsuario(usuario, tipoMensagem);
	}
	
	public Pasta persist(Pasta pasta) throws DatabaseException{
		pasta.setUsuario(ManagedBean.getLoggedUser());
		pasta.setTipoMensagem(new TipoMensagem(tipoMensagem));
		return getPastaDAO().merge(pasta);
	}
	
	
	private PastaDAO getPastaDAO(){
		return pastaDAO == null ? pastaDAO = new PastaDAO() : pastaDAO;
	}

	public Pasta findById(int id) throws DatabaseException {
		return getPastaDAO().findById(id);
	}

	public boolean delete(Pasta pasta) throws DatabaseException {
		UsuarioMensagemDAO dao = new UsuarioMensagemDAO(tipoMensagem);
		dao.findByPasta(ManagedBean.getLoggedUser(), pasta);
		if(dao.list().size() == 0){
			getPastaDAO().makeTransient(pasta);
			return true;
		}else{
			return false;
		}
	}
}

muito obrigado[/quote]