struts2表单重复提交问题 博客分类: 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= 您已经提交了表单,请不要重复提交。
推荐阅读
-
struts2表单重复提交问题 博客分类: Struts2
-
struts2 文件上传 文件大小配置问题 博客分类: Struts2 strutsopensourcejspxmlwebservlet
-
struts2后台重复获取前台参数问题 博客分类: 数据交互 strutsexcel拼接参数表单提交
-
java web ,ajax,struts2,namespace 路径问题; 博客分类: java web struts2ajaxjava webactionnamespace
-
ssi架构下使用struts2的标签的一个小问题 博客分类: web框架
-
应用Struts2处理表单数据 博客分类: Struts2 应用Struts2处理表单数据struts2form表单action
-
详解struts2的token机制和cookie来防止表单重复提交
-
详解struts2的token机制和cookie来防止表单重复提交