目的是防止数据重复提交到库表
struts2本身有<s:token/>拦截器来做到这点的,但项目里面别的问题,在提交表单时只能去掉这个拦截器。
所以想在action中提交表单的方法里面利用session来判断是否是重复提交
在调用后台service执行操作时,先判断session中是否有你放进去的那个值,没有才执行后台操作
成功执行操作,往session里put一个值
但是这样session里的值会一直在,再一次填写并提交表单时会因为session没有清空而无法再保存数据不知道session里什么时候放值,什么时候把值清掉呢?
我试了好多次都不成
struts2本身有<s:token/>拦截器来做到这点的,但项目里面别的问题,在提交表单时只能去掉这个拦截器。
所以想在action中提交表单的方法里面利用session来判断是否是重复提交
在调用后台service执行操作时,先判断session中是否有你放进去的那个值,没有才执行后台操作
成功执行操作,往session里put一个值
但是这样session里的值会一直在,再一次填写并提交表单时会因为session没有清空而无法再保存数据不知道session里什么时候放值,什么时候把值清掉呢?
我试了好多次都不成
解决方案 »
- 要选择技术架构,请教用socket和用webservice有什么区别各自的优缺点,请牛人给予指点
- myeclipese搭建数据库的问题
- 【Spring】Spring到底能给我带来什么好处?
- Spring2.5的MVC架构
- weblogic Execute Threads 不断增加
- include的问题和<html:option>中<bean:write>的问题
- #非………………常简单的一个问题,但需要好好考虑:eclipse 建了一个普通的工程、tomcat目录、插件、映射
- 有关TOMCAT配置的一个小问题
- 谁肯来这,超级郁闷,快疯掉了
- 将class文件用混淆器处理后访问的时候出现怪问题!!!
- 请教各位高手一个关于数据库搜索的问题
- 一世界500强面试题
再也不是以前朋友所鼓吹的"在CSDN提问,就能解决问题"
还有,每次往session中放值,虽然key值是一样的,但value貌似并没覆盖,而是并行存在
你在你的action里面写个saveToken(request);就可以了啊
请把代码写全些
你这种写法我不知所以然
请恕我功力尚浅 O(∩_∩)O~
http://peixun.96963.com/resourse/tutorial-43.html
别的方法在struts2里不行
如果struts2还采用struts1的token令牌,就没有任何意义了。整的那么繁琐。那是技术的倒退
题目说明了我这里不能用它自身的token拦截器
使用它影响页面显示从action返回的错误消息,也就是this.addFieldError("err","......");return INPUT;
返回到input页面时field error显示不出来
请大家看清楚题意。。
提交到action中,如果session中对应的key有值并与提交的数据一致的话执行操作,
执行完成后清除session中的值。否则提示重复提交
你好!按照你的指教我调了好久终于成功了。谢谢你!
但是,在填写表单页面使用
<s:hidden name="sub" value="session_value"/>
<s:hidden name="sub" value="#session.session_value"/>
<s:hidden name="sub" value="%{session_value}"/>
都得不到在action里面放到session里的值而只能用<input type="hidden" name="sub" value="${session_value}"/>
这种EL表达式才取得到值
那么,JSP页面采用struts2的标签取session中的值,怎么做呢?
这样应该可以的
<s:hidden name="sub" value="${#session.session_value}"/>
这样写报错:
org.apache.jasper.JasperException: /assets/businessChange/chBusinessView.jsp(340,8) According to TLD or attribute directive in tag file, attribute value does not accept any expressions
试了半天发现原来用#session.xxx能正确取到action里面put到session中的值
原来解决这个本帖中的问题时,值也是取到了,只是我从地址栏看那个参数带的值是0,以为没取到,其实是没显示完全而已(可能地址栏显示长度有限制)
因我在action里面往session放值是session.put("cabValue", Math.random() + ""),是一个0到1之间的伪随机double值,地址栏所以只看见了0
<s:url id="cabApply" action="userAffirm" namespace="/assets/businessChange">
<s:param name="cabinetId" value="%{cbCabinetsExeBO.id}"/>
<s:param name="formId" value="%{changeApplyFormBO.id}" />
<s:param name="subApplyExeType" value="%{'CABI'}" />
<s:param name="cabAffirmSession" value="#session.cabValue"/>
</s:url>
<s:a href="%{cabApply}" cssClass="buttonBlue"> 用户确认 </s:a>
但有一个问题:
public String login(){//登陆
//用户名密码比正确后
session.put("user",this.user);//将登陆成功的用户存入session
}
public String logout(){//注销
session.remove("user");
}
假如有10为用户登陆后,其中一人调用logout()方法注销时,会将所有用户从session中注销掉,因为session.put()方法的key是固定的