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
rafoli
Junho 28, 2007, 6:25pm
#5
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 > 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";
}
}
}
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
<s:if test="usuario == null">
<!--<head>
<META HTTP-EQUIV="Refresh" CONTENT="0;URL=/struts2/pages/expired.html">
</head>-->
<br>
Usuário: <s:property value="%{usuario.nome}"/><br>
</s:if>
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!
rafoli
Junho 28, 2007, 10:34pm
#16
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