首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

struts2表单重复提交有关问题

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


热点排行