`

struts2表单重复提交问题

 
阅读更多

 

struts2   使用拦截器来检查表单是否重复提交,它采用同步令牌的方式来实现对表单重复提交的判断。

首先需要在表单的form标签中使用   <s:token></s:token>用这个标签会在form中产生两个hide的文本域,并且每次加载页面都会产生不同的token ID

<s:token>   标签创建一个新的令牌值,并用你所指定的令牌名把令牌保存到   session   中。而这个令牌值是随即产生的经过加密的字符序列,不会重复。

其次需要为   action   配置   TokenInterceptor   或者   TokenSessionStoreInterceptor   拦截器。这两个拦截器都已经在 struts-default.xml   中定义,但没有包含在   defaultStack   拦截器栈中。

配置实例如下:

<   action  name   =   "register"  class   =   "com.xxx.xxx.RegisterAction"   >

       <!--  配置异常映射,当   RegisterAction   抛出   Exception   异常时,向用户显示   error.jsp   页面   -->

       <   exception-mapping  result   =   "error"  exception   =   "java.lang.Exception"   />

       <   result name="invalid.token">/WEB-INF/pages/register.jsp</result>

       <   result  name   =   "input"   >   /WEB-INF/pages/register.jsp   </   result   >

       <   result  name   =   "success"   >   /WEB-INF/pages/success.jsp   </   result   >

       <   result  name   =   "error"   >   /WEB-INF/pages/error.jsp   </   result   >

       <   interceptor-ref  name   =   "defaultStack"   >  <!--有时候需要配上,否则参数无法绑定到action的属性上-->

          <   param  name   =   "workflow.excludeMethods"   >   default   </   param   >

       </   interceptor-ref   >

       <interceptor-ref name="token">

           <param name="excludeMethods">default</param>

       </interceptor-ref>

     </   action   >

注:   excludeMethods   指定要排除的方法。

  register.jsp   页面中添加   action   级别的错误信息显示的标签:   <   s:actionerror   />

  form   中添加   <s:token>   标签:   <s:token></s:token>

最好为在资源文件中设置键   struts.messages.invalid.token   的本地化消息。比如:struts.messages.invalid.token=   您已经提交了表单,请不要重复提交。


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics