Dúvida :: Como funciona o Scope.SESSION e a passagem de variáveis

Ola pessoa, estou desenvolvendo minha primeira aplicação em JBOSS Seam + JSF & Rich Faces.

Só que estou com uma dúvida como funciona as passagens de variáveis com o Scope.Session. Bom vou explicar como estou desenvolvendo minha aplicação.

Bom dentro dela após logado. Eu acesso a listagem das minhas revendas que tem o seu crud.


| | | | | |
| Revenda | ------------------>| Funcionários | ------------------> | Cadastro Funcionario |
|_ _ _ _ _ _ _ | |_ _ _ _ _ _ _ _ _ _ | | _ _ _ _ _ _ _ _ _ _ _ _ |
Lista Lista func. da Revenda Novo Funcionário da Revenda
revendaAction funcionarioAction
funcionarioAction.
listaFuncionario(revenda)

Então é o seguinte, na minha aplicação eu tenho um link na linha da revenda que chama a lista de funcionários passando o item(revenda), após clicar nele aparece a lista de funcionários com suas opções, e também aparece o nome da empresa que foi enviada. Mas quando chamo a pagina de cadastroFuncionario.xhtml, o conteudo de funcionarioAction.revenda.nomeFantasia esta null, como tivesse chamando um novo componente, não sei ao certo.

Eu gostaria de fazer essa passagem do objeto da revenda dentro da sessão. Eu resolvi colocando um link direto na listagem da revenda para o cadastro do Funcionário.

Se alguem puder passar essa dica… Obrigado desde já…

Valeu pessoal

Códigos.

revendaLista.xhtml

<!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:h="http://java.sun.com/jsf/html"
      xmlns:a4j="http://richfaces.org/a4j"
      xmlns:rich="http://richfaces.org/rich"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:s="http://jboss.com/products/seam/taglib"
      template="/admsc/templateSistema.xhtml">
            
	<ui:define name="cabecalho"> Lista Revendas Automotivas</ui:define>
	
	<ui:define name="conteudo">
		
		<a4j:form id="formRevendaLista" enctype="multipart/form-data">
		
			<f:loadBundle var="msgs" basename="messages"/>
		
			<a4j:loadScript src="/resources/jquery-1.2.6.pack.js" /> 
			
			<h:messages />
			
			<h:commandLink action="#{revendaAction.initRevenda}">
				<h:outputText value="Inserir" />
			</h:commandLink>
			<br/>
											
			<rich:dataTable id="revendaLista" value="#{revendas}" var="item" width="790px">
				<rich:column sortBy="#{item.id}">
					<f:facet name="header">
						<h:outputText value="Código" />
					</f:facet>
					<h:outputText value="#{item.id}" />
				</rich:column>
				<rich:column sortBy="#{item.nomeFantasia}">
					<f:facet name="header">
						<h:outputText value="Nome Fantasia" />
					</f:facet>
					<h:outputText value="#{item.nomeFantasia}" />
				</rich:column>
				<rich:column sortBy="#{item.proprietario}">
					<f:facet name="header">
						<h:outputText value="Proprietário" />
					</f:facet>
					<h:outputText value="#{item.proprietario}" />
				</rich:column>
				<rich:column>
					<f:facet name="header">
						<h:outputText value="Telefone" />
					</f:facet>
					<h:outputText value="#{item.telefone}" />
				</rich:column>
				<rich:column>
					<f:facet name="header">
						<h:outputText value="Logomarca" />
					</f:facet>			
					<s:graphicImage value="#{item.logomarca}" id="logomarca">  					    
					  <s:transformImageSize height="100" maintainRatio="true" />						 
					</s:graphicImage>
				</rich:column>
				<rich:column>
					<f:facet name="header">
						<h:outputText value="Funcionários" />
					</f:facet>
					<s:link id="listaFuncionarios" action="#{funcionarioAction.listaFuncionarios(item)}">
						<h:graphicImage value="imagens/formulario.jpg" title="Lista"
							styleClass="imagemLink"/>
					</s:link>					
					<s:link id="cadastroFuncionario" action="#{funcionarioAction.cadastroFuncionario(item)}">
						<h:graphicImage value="imagens/funcionario.png" title="Cadastro"
							styleClass="imagemLink"/>
					</s:link>					
				</rich:column>
				<rich:column>
					<f:facet name="header">
						<h:outputText value="Endereço" />
					</f:facet>
					<s:link id="Endereco" action="#{revendaAction.cadastraEndereco(item)}">
						<h:graphicImage value="imagens/formulario.jpg" title="Endereco"
							styleClass="imagemLink"/>
					</s:link>					
				</rich:column>
				<rich:column>
					<f:facet name="header">
						<h:outputText value="Status" />
					</f:facet>
					<h:outputText value="#{revendaAction.revenda.status}" />					
				</rich:column>				
				<rich:column>
					<f:facet name="header">
						<h:outputText value="Ações" />
					</f:facet>
					
					<s:link id="editar" action="#{revendaAction.editaRevenda(item)}">
						<h:graphicImage value="imagens/editar.png" 
							title="Editar" styleClass="imagemLink" />					
					</s:link>
					
					<a4j:region>
						<a4j:commandLink action="#{revendaAction.excluirRevenda(item)}" reRender="revendaLista"  
	                     onclick="if (!confirm('Deseja excluir este registro?')) return false;">  
		                     <h:graphicImage value="imagens/excluir.png" alt="Excluir" styleClass="imagemLink" />                         
	                    </a4j:commandLink> 
                   </a4j:region>
					
				</rich:column>			
			</rich:dataTable>
		</a4j:form>
	
	</ui:define> 
</ui:composition>

funcionarioLista.xhtml

<!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:h="http://java.sun.com/jsf/html"
      xmlns:a4j="http://richfaces.org/a4j"
      xmlns:rich="http://richfaces.org/rich"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:s="http://jboss.com/products/seam/taglib"
      template="/admsc/templateSistema.xhtml">
            
	<ui:define name="cabecalho"> Administração Sofistcarros - Revendas/Funcionarios</ui:define>
	
	<ui:define name="conteudo">
		
		<a4j:form id="formFuncionarioLista" enctype="multipart/form-data">
		
			<f:loadBundle var="msgs" basename="messages"/>
		
			<a4j:loadScript src="/resources/jquery-1.2.6.pack.js" />  	
					
			<h:messages />
			
			<div>
				Empresa:&nbsp;<h:outputText value="#{revendaAction.revenda.nomeFantasia}" />
			</div>
			
			<h:commandLink action="#{funcionarioAction.initFuncionario(funcionarioAction.revenda)}">
				<h:outputText value="Inserir" />
			</h:commandLink>
			<br/>
			
			<div class="emptyDataTable">
				<h:outputText value="#{msgs.listaDataTableVazia}" rendered="#{empty contaFuncionarios}"/>
			</div>
																				
			<rich:dataTable id="funcionariosLista" value="#{contaFuncionarios}" var="item" width="790px"
			 rendered="#{not empty contaFuncionarios}">
				<rich:column sortBy="#{item.id}">
					<f:facet name="header">
						<h:outputText value="Código" />
					</f:facet>
					<h:outputText value="#{item.id}" />
				</rich:column>
				<rich:column sortBy="#{item.nomeFantasia}">
					<f:facet name="header">
						<h:outputText value="Nome Fantasia" />
					</f:facet>
					<h:outputText value="#{item.nomeFantasia}" />
				</rich:column>
				<rich:column sortBy="#{item.proprietario}">
					<f:facet name="header">
						<h:outputText value="Proprietário" />
					</f:facet>
					<h:outputText value="#{item.proprietario}" />
				</rich:column>
				<rich:column>
					<f:facet name="header">
						<h:outputText value="Telefone" />
					</f:facet>
					<h:outputText value="#{item.telefone}" />
				</rich:column>
				<rich:column>
					<f:facet name="header">
						<h:outputText value="Logomarca" />
					</f:facet>			
					<s:graphicImage value="#{item.logomarca}" id="logomarca">  					    
					  <s:transformImageSize height="100" maintainRatio="true" />						 
					</s:graphicImage>
				</rich:column>
				
				<rich:column>
					<f:facet name="header">
						<h:outputText value="Ações" />
					</f:facet>
					
					<s:link id="editar" action="#{funcionarioAction.editaFuncionario(item)}">
						<h:graphicImage value="imagens/editar.png" 
							title="Editar"
							styleClass="imagemLink" />				
					</s:link>
					
					<a4j:commandLink action="#{funcionarioAction.excluiFuncionario(item)}" reRender="formFuncionarioLista"  
                     onclick="if (!confirm('Deseja excluir este registro?')) return false;">  
                     <h:graphicImage value="imagens/excluir.png" styleClass="imagemLink" alt="Excluir" />                         
                    </a4j:commandLink> 
		
					
				</rich:column>			
			</rich:dataTable>
		</a4j:form>
	
	</ui:define> 
</ui:composition>

cadastroFuncionario.xhtml

<!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:h="http://java.sun.com/jsf/html"
      xmlns:a4j="http://richfaces.org/a4j"
      xmlns:rich="http://richfaces.org/rich"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:s="http://jboss.com/products/seam/taglib"
      template="/admsc/template.xhtml">
      
       
	<ui:define name="cabecalho"> Cadastro Funcionário da Revenda</ui:define>
	
	<ui:define name="conteudo">
		
		<h3><h:outputText value="Cadastro de Funcionário" /></h3>
			
		<h:form id="formFuncionario">
		
			<h:commandLink action="revendaLista" value="Voltar" 
				styleClass="linkSC" immediate="true" />
			<br/>
			
			<div class="errorsMessages">		
				<h:messages />
			</div>
		  
			Empresa: <h:outputText value="#{revendaAction.revenda.nomeFantasia}" />
			<h:inputHidden value="#{revendaAction.revenda.id}" id="id_revenda" />
			<br/>
		  		  
		
					
		</h:form>
	
	</ui:define>
 
</ui:composition>

RevendaAction.java

@Name("revendaAction")
@Scope(ScopeType.SESSION)
public class RevendaActions implements RevendaSC {
	
	@In("#{entityManager}")
	private EntityManager em;
		
	@In
	private FacesMessages facesMessages;
		
	@DataModel
	private List<Revenda> revendas;	
	
	@In(create=true) 
	@Out(required=false)
	@DataModelSelection
	private Revenda revenda;
	
	@In(create=true)
	private Endereco endereco;
	
	public Revenda getRevenda() {
		return revenda;
	}

	public void setRevenda(Revenda revenda) {
		this.revenda = revenda;
	}

	public Endereco getEndereco() {
		return endereco;
	}

	public void setEndereco(Endereco endereco) {
		this.endereco = endereco;
	}

	public List<Revenda> getRevendas() {	
		return revendas;
	}
	
	
	@Begin(join=true)
	public String initRevenda(){
		this.revenda = new Revenda();
		return "cadastroRevenda";
	}
	
	@Begin(join=true)
	public String editaRevenda(Revenda revenda){
		this.revenda = revenda;
		return "cadastroRevenda";		
	}
	
	@Begin(join=true)
	public String cadastraEndereco(Revenda revenda){
		if (revenda.getEndereco() == null){
			this.endereco = new Endereco();
		}else{
			endereco = revenda.getEndereco();
		}
		return "cadastraEndereco";
	}
	
	/**
	 * Função responsavel em salvar uma revenda no 
	 * Banco de Dados
	 * 
	 * @author Romildo Jozue Paiter
	 * @data 25/01/2011
	 */
	@End
	public String salvaRevenda(){
		if(revenda.getId() == null){
			try {
				
				revenda.setDataCadastro(new Date());
				revenda.setStatus(StatusContaRevenda.INATIVO);
				
				em.persist(revenda);
				facesMessages.addFromResourceBundle("inserirRevendaSucesso");
			}catch (Exception e) {
				facesMessages.addFromResourceBundle("inserirRevendaFalha");
				e.printStackTrace();
				return null;
			}
			return "listaRevenda";
		}else{
			try {
				// em.refresh(revenda);
				em.merge(revenda);
				facesMessages.addFromResourceBundle("inserirRevendaSucesso");
			}catch (Exception e) {
				facesMessages.addFromResourceBundle("inserirRevendaFalha");
				e.printStackTrace();
				return null;
			}
			return "listaRevenda";			
		}			
	}
	
	
	@End 
	public String salvaEndereco(){
		if(endereco.getId() == null){
			em.persist(revenda.getEndereco());
			// revenda.setEndereco(endereco);
			em.merge(revenda);
		}else{
			em.merge(revenda.getEndereco());
			
		}
		return "listaRevenda";
	}
	
	public String alterarRevenda() {
		// TODO Auto-generated method stub
		return null;
	}

	@Begin
	public String excluirRevenda(Revenda rvd) {
		try{
			em.remove(rvd);
			facesMessages.addFromResourceBundle("excluirRevendaSucesso");
			return "listaRevenda";
		}catch (Exception e) {
			facesMessages.addFromResourceBundle("excluirRevendaFalha");
			e.printStackTrace();
			return null;			
		}
		
	}
	
	
	@SuppressWarnings("unchecked")
	@Factory("revendas")
	public void listaRevenda() {
		revendas = em.createQuery("select r from Revenda r").getResultList();		
	}
}

funcionarioAction.java

@Name("funcionarioAction")
@Scope(ScopeType.SESSION)
public class FuncionarioAction implements FuncionarioItf {
	
	@In("#{entityManager}")
	private EntityManager em;
	
	@DataModel
	private List<ContaFuncionario> contaFuncionarios;
	
	@In(create=true)
	@Out(required=false)
	@DataModelSelection
	private ContaFuncionario contaFuncionario;

	@In(create=true)
	@Out(required=false)
	private Revenda revenda;
	
	@In
	private FacesMessages facesMessages;
	
	
	/* FUNÇOES DO FUNCIONARIO 
	 * ------------------------------------------*/

	public String cadastroFuncionario(Revenda revenda) {
		this.revenda = revenda;
		return "cadastroFuncionario";
	}

	
	public String listaFuncionarios(Revenda revenda) {
		this.revenda = revenda; 			
		return "funcionariosLista";
	}
	
	public String salvaFuncionario() {
		return null;
	}

	public String editaFuncionario(ContaFuncionario cf) {

		return null;
	}

	public String excluiFuncionario(ContaFuncionario cf) {

		return null;
	}
	
	@Begin	
	public String initFuncionario(){
		return "cadastraFuncionario";
	}
	
	/* Getter e Setter
	 * -----------------------------------------------*/
	
	public List<ContaFuncionario> getContaFuncionarios() {
		return contaFuncionarios;
	}

	public void setContaFuncionarios(List<ContaFuncionario> contaFuncionarios) {
		this.contaFuncionarios = contaFuncionarios;
	}

	public ContaFuncionario getContaFuncionario() {
		return contaFuncionario;
	}

	public void setContaFuncionario(ContaFuncionario contaFuncionario) {
		this.contaFuncionario = contaFuncionario;
	}

	public Revenda getRevenda() {
		return revenda;
	}

	public void setRevenda(Revenda revenda) {
		this.revenda = revenda;
	}
}

Obrigado Pessoal

[]`s

Romildo Jozué Paiter
Bacharelando Sistema da Informação