`

Struts2 防止重复提交

阅读更多

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

首先需要在表单中使用 <s:token name="user.token"></s:token>

<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" >

       < 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 name="user.token"></s:token>

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

 

參考來源:http://www.iteye.com/topic/243196

分享到:
评论
1 楼 chenxiang105 2010-06-30  

大虾 能否提供个小demo 。小弟刚接触struts2不久 呵呵..

相关推荐

Global site tag (gtag.js) - Google Analytics