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