[Resolvido]Armazenando objeto na sessao [jsf]

Java

18/12/2012

Pessoal Tenho um objeto do tipo "requisicao" (uma classe do sistema). Como posso armazenar esse objeto na sessao ? Obrigado
Tiago Magalhães

Tiago Magalhães

Curtidas 0

Respostas

Douglas Eric

Douglas Eric

18/12/2012

crie um ManagedBean que é iniciado junto com a pagina inicial; Coloque nele a anotação
@SessionScoped
Qualquer bean que seja "SessionScoped" tem seu "tempo de vida" igual até que a sessão expire (timeout ou o usuario fechar a página) Então qualquer coisa nesse bean pode ser acessado de qualquer pagina e sempre vai ser o mesmo objeto. Só tome cuidado para iniciar o objeto apenas uma vez, ou ele vai sobreescrever por um vazio sempre que chamar.
GOSTEI 0
Thiago Palmeira

Thiago Palmeira

18/12/2012

Importante também de fazer o registro desse bean no arquivo faces-config.xml e registrar o scope do tipo "session".
GOSTEI 0
Tiago Magalhães

Tiago Magalhães

18/12/2012

[quote="sekkuar"]crie um ManagedBean que é iniciado junto com a pagina inicial; Coloque nele a anotação
@SessionScoped
Qualquer bean que seja "SessionScoped" tem seu "tempo de vida" igual até que a sessão expire (timeout ou o usuario fechar a página) Então qualquer coisa nesse bean pode ser acessado de qualquer pagina e sempre vai ser o mesmo objeto. Só tome cuidado para iniciar o objeto apenas uma vez, ou ele vai sobreescrever por um vazio sempre que chamar.
Entendi tudo o q vc flw, mas veja bem minha situacao. Primeiro vou colar meu metodo salvar aqui e depois te explicar a minha necessidade...
public String salvar() {      
          
        ContextoBean contextoBean = ContextoUtil.getContextoBean();    
                FacesContext context = FacesContext.getCurrentInstance();   
         
        UsuarioRN usuarioRN = new UsuarioRN();  
        RequisicaoRN requisicaoRN = new RequisicaoRN();  
        ItemRN itemRN = new ItemRN();  
        ItemRequisicaoRN itemRequisicaoRN = new ItemRequisicaoRN();  
        StatusRN statusRN = new StatusRN();  
        ItemRequisicao itemRequisicao = new ItemRequisicao();  
          
        /* 
         * Salvando na tabela requisicao 
         */  
          
        //pega objeto usuario (usuarioLogado)  
        Usuario usuarioLogado=  usuarioRN.buscarPorLogin(contextoBean.getUsuarioLogado().getLogin()); //getUsuarioLogado  
        System.out.println("objeto usuario:  " + usuarioLogado);  
        requisicao.setUsuario(usuarioLogado);  
      
        //Nova requisicao -> codigoStatus sempre = 1  
         codigoPendente = "pendente";  
         Status codigoStatus = statusRN.buscarPorNome(getCodigoPendente());  
         System.out.println(getCodigoPendente());  
         requisicao.setStatus(codigoStatus);  
          
         //GetDatahora do computador do cliente  
         Locale locale = new Locale("pt","BR");   
         GregorianCalendar calendar = new GregorianCalendar();   
         SimpleDateFormat formatador = new SimpleDateFormat("dd' de 'MMMMM' de 'yyyy' - 'HH':'mm'h'",locale);   
         String df = formatador.format(calendar.getTime());  
         System.out.println(formatador.format(calendar.getTime()));   
         requisicao.setDataHora(df);  
         requisicaoRN.salvar(requisicao);  
           
        /* 
         * Salvando na tabela item_x_requisicao 
         */  
           
        //pega objeto item (item selecionado)  
        Item  itemSelecionado= itemRN.buscarItem(itemBean.getItemm());  
        System.out.println(itemSelecionado);  
        itemRequisicao.setItem(itemSelecionado);  
          
         // Pega codigo da requisicao  
           
         Requisicao codigoRequisicaoAtual = requisicaoRN.buscarCodigoPendente(requisicao.getCodigo());  
         System.out.println("Codigo requisicao:" +codigoRequisicaoAtual);  
         itemRequisicao.setRequisicao(codigoRequisicaoAtual);  
         //Pega quantidade solicitada (pagina)  
         itemRequisicao.setQuantidadeSolicitada(qntSoli);  
           
         //Save  
         itemRequisicaoRN.salvar(itemRequisicao);  
          
        return "this.destinoSalvar";  
    }  
Entao, toda vez q eu clico em salvar eh gerado um novo codigoRequisicao q eh salvo em outra tabela (item_x_requisicao)... Eu preciso repetir esse codigo na tabela item_x_requisicao enquanto o usuario estiver logado... Se ele fizer logoff e fazer uma nova requisicao ai sim o codigoRequisicao vai ser diferetne... Ai eu pensei em fazer isso:
if(objetoRequisicaoArmazenadoNaSessao ==null){
    Item  itemSelecionado= itemRN.buscarItem(itemBean.getItemm());  
        System.out.println(itemSelecionado);  
        itemRequisicao.setItem(itemSelecionado);  
          
         // Pega codigo da requisicao  
           
         Requisicao codigoRequisicaoAtual = requisicaoRN.buscarCodigoPendente(requisicao.getCodigo());  
         System.out.println("Codigo requisicao:" +codigoRequisicaoAtual);  
         itemRequisicao.setRequisicao(codigoRequisicaoAtual);  
         //Pega quantidade solicitada (pagina)  
         itemRequisicao.setQuantidadeSolicitada(qntSoli);  
           
         //Save  
         itemRequisicaoRN.salvar(itemRequisicao);  
          ...
}

else{
  //pega objeto item (item selecionado)  
        Item  itemSelecionado= itemRN.buscarItem(itemBean.getItemm());  
        System.out.println(itemSelecionado);  
        itemRequisicao.setItem(itemSelecionado);  
          
        
           
       
         System.out.println("Codigo requisicao:" +codigoRequisicaoAtual);  
      temRequisicao.setRequisicao(objetoRequisicaoArmazenadoNaSessao);  
         //Pega quantidade solicitada (pagina)  
         itemRequisicao.setQuantidadeSolicitada(qntSoli);  
           
         //Save  
         itemRequisicaoRN.salvar(itemRequisicao);  
          

}

Entendeu mais ou menos ? Foi o unico jeito q eu pensei p repetir o codigoRequisicao (depois q o usuario logado faz a primeira requisicao). Se vc n etendeu, me fala q eu explico de uma forma mais clara. Mas eh isso... Outra coisa: Qual vai ser o conteudo dessa classe q fica a sessao (a q vc flw p eu criar) To meio perdido ainda... Sou novato em programacao, ainda to aprendendo... e no meu trabalho eu sou o unico q desenvolve em jsf+spring+hibernate. Por isso q tem vezes q eu tenho dificuldade. Mas conseguindo fazer isso, o resto do sistema vai ser "facil" de terminar :) Desculpe se minha logica ta meio louca, mas eh pq a unica ajuda q eu tenho sao os foruns e internet... Abraco :smile:
GOSTEI 0
Tiago Magalhães

Tiago Magalhães

18/12/2012

[quote="thiagovpalmeir"]Importante também de fazer o registro desse bean no arquivo faces-config.xml e registrar o scope do tipo "session".
certo... Vc viu meu post anterior ? qual eh o melhor jeito de fazer o q eu quero ? Se tiver alguma ideia, posta ai. Obrigado :cool:
GOSTEI 0
Davi Costa

Davi Costa

18/12/2012

FacesContext context = FacesContext.getCurrentInstance();
HttpSession session = context.getExternalContext().getSession(false);
// ai é só jogar o atributo na sessão e recuperá-lo quando quiser.

//métodos auxiliares que podem te ajudar:
public FacesContext getFacesContext() {
		return FacesContext.getCurrentInstance();
	}
	
	public HttpSession getSession() {
		return (HttpSession) getFacesContext().getExternalContext().getSession(false);
	}
	
	public HttpServletRequest getRequestSession() {
		return (HttpServletRequest) getFacesContext().getExternalContext().getRequest();
	}
Espero ter ajudado abcs
GOSTEI 0
Davi Costa

Davi Costa

18/12/2012

[quote="davi.costa"]
FacesContext context = FacesContext.getCurrentInstance();
HttpSession session = context.getExternalContext().getSession(false);
// ai é só jogar o atributo na sessão e recuperá-lo quando quiser.

//métodos auxiliares que podem te ajudar:
public FacesContext getFacesContext() {
		return FacesContext.getCurrentInstance();
	}
	
	public HttpSession getSession() {
		return (HttpSession) getFacesContext().getExternalContext().getSession(false);
	}
	
	public HttpServletRequest getRequestSession() {
		return (HttpServletRequest) getFacesContext().getExternalContext().getRequest();
	}
Espero ter ajudado abcs
Criei a classe certinho mas tive q add cast to HttpSession ! Ficou assim:
HttpSession session =(HttpSession)context.getExternalContext().getSession(false);  
Eu preciso armazenar esse objeto na sessao: requisicao.getCodigo(); N sei codificar p armazenar isso... E em relacao ao add cast to. Tem algum problema ? So compilou dessa forma : / Me ajudou muito... Obrigado
GOSTEI 0
Davi Costa

Davi Costa

18/12/2012

Pessoal N to conseguindo armazenar um objeto na sessao... Ele sempre retorna como nulo.
...  
requisicaoRN.salvar(requisicao);  
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("ObjetoRequisicaoSessao", requisicao);   
...  
Quando eu vou tentar recuperar ele:
requisicao = (Requisicao)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("ObjetoRequisicaoSessao");  
System.out.println(ObjetoRequisicaoSessao);
O q ta errado ?
GOSTEI 0
Davi Costa

Davi Costa

18/12/2012

HttpSession session =(HttpSession)context.getExternalContext().getSession(false);  
session.setAttribute("ObjetoRequisicaoSessao", requisicao);
//para recuperar
session.getAttribute("ObjetoRequisicaoSessao");
abcs
GOSTEI 0
Tiago Magalhães

Tiago Magalhães

18/12/2012

[quote="davi.costa"]
HttpSession session =(HttpSession)context.getExternalContext().getSession(false);  
session.setAttribute("ObjetoRequisicaoSessao", requisicao);
//para recuperar
session.getAttribute("ObjetoRequisicaoSessao");
abcs
Entendi... Fiz exatamente como vc flw mas ainda ta retornando nulo!
public String salvar() {

HttpSession session = (HttpSession)context.getExternalContext().getSession(false);  
...

requisicaoRN.salvar(requisicao);    
session.setAttribute("ObjetoRequisicaoSessao", requisicao);  
System.out.println("1"+ ObjetoRequisicaoSessao); 

Classe SessaoBean:
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;



@ManagedBean(name = "sessaoBean")
@SessionScoped
public class SessaoBean {
	FacesContext context = FacesContext.getCurrentInstance();  	
	HttpSession session = (HttpSession) context.getExternalContext().getSession(false);  
	

	
	  
	//métodos auxiliares que podem te ajudar:  
	public FacesContext getFacesContext() {  
	      return FacesContext.getCurrentInstance();  
	   }  
	     
	   public HttpSession getSession() {  
	      return (HttpSession) getFacesContext().getExternalContext().getSession(false);  
	   }  
	     
	   public HttpServletRequest getRequestSession() {  
	      return (HttpServletRequest) getFacesContext().getExternalContext().getRequest();  
	   }  


	   

}

GOSTEI 0
Davi Costa

Davi Costa

18/12/2012

Opa Vacilei... Agora eu vi o objeto...
requisicaoRN.salvar(requisicao);    
session.setAttribute("ObjetoRequisicaoSessao", requisicao);  		System.out.println(session.getAttribute("ObjetoRequisicaoSessao")); 
Muito obrigado pela ajuda... Sem vcs eu estaria perdido, rsrs ! Abracaoo
GOSTEI 0
Davi Costa

Davi Costa

18/12/2012

Valeu parceiro, sucesso! Assim que possível marca o post como resolvido. abcs
GOSTEI 0
POSTAR