日期:2014-05-19  浏览次数:20617 次

struts2,Action和session的问题
就是我action处理请求
然后设置了session 属性 比如是 user
然后result跳转回页面
在那个页面 user是能得到的 然后我在那个页面点了个超链接到其他页面
再用session.getAttribute就为空了

--------------我的Action
package com.manage.action;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.ServletRequestAware;

import com.manage.dao.IManageDAO;
import com.opensymphony.xwork2.ActionSupport;
import com.universalone.dao.IUniversaloneDAO;
import com.webhomework.po.Myuser;

public class ManageAction extends ActionSupport implements ServletRequestAware {

private HttpServletRequest request;
private HttpSession session;


public ManageAction() {
// TODO Auto-generated constructor stub
}

@Override
public void setServletRequest(HttpServletRequest arg0) {
request=arg0;
session=request.getSession(true);

}


public String getMemberInfo() throws Exception {
Myuser myuser=(Myuser) session.getAttribute("myuser");
System.out.println(myuser);

IManageDAO imd=(IManageDAO) request.getAttribute("imanagedao");
List<Myuser> list=imd.getMembersById(myuser, 1, 3);
System.out.println(list.size());

Myuser user=list.get(0);
if(user!=null){
session.setAttribute("myuser",user);


return "success";

}
else{

request.setAttribute("error","未找到");
return "error";
}

}
}


--------------已经测试过的方法
1.得到session的两种方式 Aware借口和ActionContext都试过
2.OGNL和JSTL还有EL表达式都使用过
3.tomcat用过3个版本 MYECLIPSE用过了2个版本
4.不同页面的session_id是一样的


综上 问题就是我设置的session用起来就跟request一样 不会这个是struts2的BUG吧???





------解决方案--------------------
action类的生命周期跟request的生命周期一样
如果下一个action需要使用到前面请求的数据,用chain可以解决
<result type="chain">
<action>的name名字
</result>