最近遇到的一个关于session的有关问题
最近遇到的一个关于session的问题
在项目中为了解决一个页面传参弹出框的问题,犹豫了好久,不知道该怎么高 ?
我要从一个action重定向到另外一个action中,要带一个参数过去,struts2的配置如:
<action name="before" class="com.test.action.Before"> <result name="success" type="redirect">to.action?flag=${flag}</result> </action>
<action name="to" class="com.test.action.To"> <result name="success" >result.jsp</result> </action>
这样确实能解决我带参数过去的问题,但是新的问题又出现了,如果用户一直刷新页面的话,那我的弹框就一直会弹出,所以为了解决问题,我看了struts2 的result type ,chain 不适合。因此不让参数显示在URL中,但同时又可以弹出框,于是我考虑了两种方法。
1.利用session ,把标记放到session中,在另外一个中获取到,代码:
写道
Map<String,Integer> session = ActionContext.getContext().getSession() ;
session.put("flag", 1) ;
Map<String ,Integer> session = ActionContext.getContext().getSession() ;
if(null != session && session.containsKey("flag") ) {
flag = (int)session.get("flag") ;
session.clear() ;
}
session.put("flag", 1) ;
Map<String ,Integer> session = ActionContext.getContext().getSession() ;
if(null != session && session.containsKey("flag") ) {
flag = (int)session.get("flag") ;
session.clear() ;
}
我写的小例子调试OK,但是在我的项目工程中,却怎么也拿不到我塞进去的值,查看工程源码是因为, 认证拦截器中有这么ActionContext.getContext().getSession().clear(); 一句话,只允许把用户信息放到session中去。
此路不通。
2.考虑用静态变量,虽然是2个action共享到数据了,但是当多用户,多并发的时候,由于是公用一个变量,会出现脏数据的情况。此路又不同。
最终,还是用最原始的方法,在弹出框以后用js做个重定向,这样子就OK了!!!
总结:1.不要去为了解决一些小问题,而去添加与业务逻辑的无关的后台代码,走一些比较偏的方法,可以寻求比较通用并普遍的解决方案。
2,有时候经验确实会帮助开发解决很多问题,遇到问题可以寻求老员工的帮助,你会有不少收获
3,做的越多,错的越多,思考的越多,成长的也越多