persistência de objetos na sessão - struts2

15 respostas
lmprates

Olá pessoal,

Seguinte, estou incluindo o objeto “usuario” na sessão através do comando

após, a action direciona para a página inicio.jsp.
Dentro da inicio.jsp consigo a objeto “usuario” existe e posso chegar seu nome e outros atributos.
Porém, quando clico em um link da pagina inicio.jsp, que me envia para outra página (lisata.action por exemplo), nesta segunda página o objeto “usuario” já deixa de existir.
Ou seja, é como se a sessão fosse finalizada.

Alguma sugestão? Existe alguma configuração em relação a isto?

Estou utilizando o tomcat 6.0.13, strus 2.0.8 e eclipse.

Agradeço qualquer ajuda.

15 Respostas

marcelo_mococa

o browser está configurado para aceitar cookies?

lmprates

está sim marcelo_mococa !

T

Num sei cara, mas Só uma súvida, pq vc tah pegando a session assim?

[]s

R

lmprates tente mudar a forma de setar a sessao...
Segue um exemplo de como trabalho com sessao....

public String addCart() {
		ActionContext context = ActionContext.getContext();
		List<Product> cart = (List<Product>) context.getSession().get("cart");

		if (cart == null)
		{
		   System.out.println("Cart = null");
		    cart = new ArrayList<Product>();
			context.getSession().put("cart", cart);
		}
		if (productId != null) {
			IProductDAO dao = DAOFactory.getInstance().getProductDAO();				
			product = dao.search(productId); 
			System.out.println("Product = " + product.getName());
			cart.add(product);	
			context.getSession().put("cart", cart);
		}
		return "success";
	}

codigo para obter o elemento da sessao

public String listCart() {
		ActionContext context = ActionContext.getContext();
		products = (List<Product>) context.getSession().get("cart");
		return "success";
	}

Rafael Oliveira

T

Só complementando…

Vc pode ( e deve) implementar a interface SessionAware;

criar um campo com gets e sets tipo Map Session.

Ae c só faz session.get(qqr coisa.)

acho mais simples…

lmprates

e aí pessoal…

obrigado pelas respostas, mas o esquema ainda não tá funcionando.
Será que não pode algum problema de configuração do struts?

já tentei diversas formas de acessar o session e o objeto "usuario" simplesmente some quando vou para outras páginas!

por último a minha classe Login.java está assim:

import java.util.Map;

import hibernate.dao.UsuarioDAO;
import hibernate.modelo.Usuario;

import org.apache.struts2.interceptor.SessionAware;

import com.opensymphony.xwork2.ActionContext;

public class Login implements SessionAware { 
	
	private Usuario usuario;
	private Map session;

	public Usuario getUsuario() {
		return usuario;
	}
	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}
	
	public void setSession(Map arg0) {
		this.session=arg0;
	}
	public Map getSession(){
		return this.session;
	}
	
	public String execute() throws Exception{
		UsuarioDAO dao = new UsuarioDAO();
		
		int id = dao.login(getUsuario());
		if (id &gt 0){
			setUsuario(dao.busca(id));
			getUsuario().setSenha("");
			
			//ServletActionContext.getRequest().getSession(false).setAttribute("usuario", getUsuario());
			
			/*HttpSession session = ServletActionContext.getRequest().getSession(); 
			session.setAttribute("usuario", getUsuario());
			ActionContext.getContext().put(ServletActionContext.SESSION, session);*/
			
			/*HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);
			HttpSession sessao = request.getSession();
		 	sessao.setAttribute("usuario", getUsuario());
		 	ActionContext.getContext().put(ServletActionContext.HTTP_REQUEST, request);
		 	*/

			/*ActionContext context = ActionContext.getContext();
			context.getSession().put("usuario", getUsuario());*/
			
			session.put("usuario", getUsuario());
			
			return "success";
			
		}else{
			return "error";
		}
	}
}
T

quanto a essa linha…

int id = dao.login(getUsuario());

neste momento de onde vem esse usuário?

lmprates

o usuário vem do formulário de login, onde o usuário coloca user e password.

o método dao.login retorna o id do usuário.

Caso o usuário não exista, retorna zero.

T

vc pode postar o código JSP que busca pelo usuário na Session?

lmprates

olá Tecnoage

&lt;s:if test="usuario == null"&gt;
	
	&lt;!--&lt;head&gt;
    	&lt;META HTTP-EQUIV="Refresh" CONTENT="0;URL=/struts2/pages/expired.html"&gt;
	&lt;/head&gt;--&gt;
	<br>
		Usuário: &lt;s:property value="%{usuario.nome}"/&gt;<br>
	
&lt;/s:if&gt;

esse é o código que eu utilizo. ele fica em um jsp a parte e faço um include dele nas páginas onde preciso verificar se a sessão é válida.

T

como vc sabe que este usuário está sendo pego na session? Pega o usuário da session via OGNL na tag if.

assim: #session[usuario]

qqer coisa me add no msn.

T

nossa meu descupa, é #session[‘usuario’]

lmprates

Tecnoage:
como vc sabe que este usuário está sendo pego na session? Pega o usuário da session via OGNL na tag if.

assim: #session[usuario]

qqer coisa me add no msn.

Agora funcionou…tinha esquecido desse lance.

obrigado.

T

então cara, mas mesmo assim é estranho, se eu não estou enganado (por favor alguém me corrija) a OGNL busca objeto que vc indica em vários escopos se não encontrar no escopo padrão… Isso q me encucou agora… mas se deu certo, blz!

R

Olha um exemplo do .java que mandei e o JSP

o JAVA
ActionContext context = ActionContext.getContext();
		List<Product> cart = new context.getSession().get("cart");
		context.getSession().put("cart", cart);
o JSP
<% if (request.getSession().getAttribute("cart") == null) out.print("0");
			        else
			        {
			        	ArrayList listProducts = (ArrayList)session.getAttribute("cart");
			        	out.print(listProducts.size());
			        }%>

Na declaração da classe é necessário somente...aqui funciona q é uma blz...estou usando pra adicionar produtos no carrinho de compras no site de um cliente

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import java.util.ArrayList;

public class ProductAction extends ActionSupport{

Rafael Oliveira

Criado 28 de junho de 2007
Ultima resposta 28 de jun. de 2007
Respostas 15
Participantes 4