欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

struts2表单重复提交问题 博客分类: Struts2  

程序员文章站 2024-03-20 16:08:40
...

 

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=   您已经提交了表单,请不要重复提交。