persistência de objetos na sessão - struts2

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.

o browser está configurado para aceitar cookies?

está sim marcelo_mococa !

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

[]s

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

[code] public String addCart() {
ActionContext context = ActionContext.getContext();
List cart = (List) 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";
}[/code]

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

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…

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(&quot;&quot;);
			
			//ServletActionContext.getRequest().getSession(false).setAttribute(&quot;usuario&quot;, getUsuario());
			
			/*HttpSession session = ServletActionContext.getRequest().getSession(); 
			session.setAttribute(&quot;usuario&quot;, getUsuario());
			ActionContext.getContext().put(ServletActionContext.SESSION, session);*/
			
			/*HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);
			HttpSession sessao = request.getSession();
		 	sessao.setAttribute(&quot;usuario&quot;, getUsuario());
		 	ActionContext.getContext().put(ServletActionContext.HTTP_REQUEST, request);
		 	*/

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

quanto a essa linha…

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

neste momento de onde vem esse usuário?

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.

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

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.

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.

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

[quote=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.[/quote]

Agora funcionou…tinha esquecido desse lance.

obrigado.

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!

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

[code]import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import java.util.ArrayList;

public class ProductAction extends ActionSupport{[/code]

Rafael Oliveira