最近遇到的一个关于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() ;
}

 

 

    我写的小例子调试OK,但是在我的项目工程中,却怎么也拿不到我塞进去的值,查看工程源码是因为, 认证拦截器中有这么ActionContext.getContext().getSession().clear(); 一句话,只允许把用户信息放到session中去。

此路不通。

 

2.考虑用静态变量,虽然是2个action共享到数据了,但是当多用户,多并发的时候,由于是公用一个变量,会出现脏数据的情况。此路又不同。

 

最终,还是用最原始的方法,在弹出框以后用js做个重定向,这样子就OK了!!!

 

 

 

总结:1.不要去为了解决一些小问题,而去添加与业务逻辑的无关的后台代码,走一些比较偏的方法,可以寻求比较通用并普遍的解决方案。

         2,有时候经验确实会帮助开发解决很多问题,遇到问题可以寻求老员工的帮助,你会有不少收获

         3,做的越多,错的越多,思考的越多,成长的也越多

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值