Struts2 防止页面表单重复提交

 

1、只要在jsp里面加上一个token标签就可以了

<s:token name="token"></s:token> 或者 <s:token name="tokenSession"></s:token>

  使用tokenSession客户端感觉会比较友好   token会跳转新页面

加完之后你可以浏览器里查看源代码,看看这个标签生成什么样的HTML标签 了。

<inputtype="hidden"name="struts.token.name"value="tokenSession"/>
<inputtype="hidden"name="tokenSession"value="7RHZTQK441RI3H6WVYGRGZ2QMB2XVHYW"/>
 是两个表单都是隐藏表单,里面有一个36位的加密的值,这也是struts2自动生成的,而且它把这个值存到了session里,当第一次提交表单时它会进行比较,如果一样的可以提交反之不许提交,这是struts2的拦截器做的。 
 

2、加上这个还不行,因为struts2用的是拦截器进行执行的,可以到struts-default.xml里看看这个拦截器是不是被加入了struts-default里面,显而没有加入,这得自己进行配置了,在 struts.xml 给自己的action 里加入一个拦截器


<action name="reguser" class="com.jobbank.users.action.UsersAction">
   <result name="stuRegOk">/app/reg/stuOk.jsp</result>
   <!-- 防止表单的重复提交   -->
    <interceptor-ref name="defaultStack" />            
    <interceptor-ref name="tokenSession" />
  </action>

如果你在action里加上了自己的拦截器那么默认的拦截器不起作用了,你得自己手动再加入,否则好多功能不能用了。

一定要把 <s:token name="tokenSession"></s:token> 放在表单里面 form 里面,否则报一个

警告: Could not find token name in params.

posted on 2013-07-29 14:40  ct_charles  阅读(310)  评论(0编辑  收藏  举报

导航