Struts2中防止表单重复提交,global-results定义全局结果处理

1、在表单中加入<s:token/>标签

2、在动作类中加入token的拦截器

 <!--如果单单写 name="token" 会丧失 defaultStack 拦截器提供的 那些功能, 默认是 defaultStack 提供的那些功能

但是一写其他拦截器,所以它也要加上-->


<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="token"></interceptor-ref>
3、增加一个名称为invalid.token的结果视图

<!--实际上用到了token的拦截器, 拦截器返回值就是 invalid.token字符串,通过源码可以看到-->

<result name="invalid.token">/success.jsp</result>

 

 

global-results定义全局结果处理

jsp页面中

 1     <s:form action="token" namespace="/" >
 2         <s:token></s:token>
 3         <s:textfield label="姓名" name="userName"/> 姓名
 4         <br/>
 5         <s:textfield label="年龄" name="age"/> 年龄
 6         <br/>
 7         <s:textfield label="密码"  name="password"/>密码
 8         <br/>
 9         <s:textfield   name="birthday"/>生日
10         <br/>
11         <s:submit value="提交" />
12     </s:form>

struts.xml中

 1 <constant name="struts.devMode" value="true" />
 2 <struts>
 3     <constant name="struts.enable.DynamicMethodInvocation" value="false"></constant>
 4     <constant name="struts.custom.i18n.resources" value="itcast"></constant>
 5 
 6     <!--只要继承了mypackage的 默认 都有个 返回结果 name="error"的,在token那个action那里就不用写 name="error" 结果处理了--> 
 7     <package name="mypackage" extends="struts-default">
 8         <global-results>
 9             <result name="error">/error.jsp</result>
10         </global-results>
11     </package>
12 <package name="token" extends="mypackage">
13         <action name="token" class="cn.itcast.action.PersonAction">
14       <!--如果单单写 name="token" 会丧失 defaultStack 拦截器提供的 那些功能, 默认是 defaultStack 提供的那些功能
15         但是一写其他拦截器,所以它也要加上-->
16         <interceptor-ref name="defaultStack"></interceptor-ref>
17         <interceptor-ref name="token"></interceptor-ref>
18       <!--实际上用到了token的拦截器, 拦截器返回值就是 invalid.token字符串,通过源码可以看到-->
19         <result name="invalid.token">/token.jsp</result>  <!--无效的时候返回的页面 一般返回到success.jsp就可以了-->
20             <result name="success">/success.jsp</result>
21             <result name="input">/submit.jsp</result>
22         </action>
23     </package>
24 </struts>

类中的提交之后 试试打印userName字段,重复刷新时页面会转到/token.jsp页面

 

 

为了让interceptor-ref name=""只写一句就引用了 

         <interceptor-ref name="defaultStack"></interceptor-ref>
         <interceptor-ref name="token"></interceptor-ref>

参考 http://www.cnblogs.com/friends-wf/p/3766425.html

 1  <package name="mydefault" extends="struts-default">
 2         <interceptors>
 3             <interceptor name="permissionInterceptor" class="cn.itcast.interceptor.PermissionInterceptor"></interceptor>
 4             <interceptor-stack name="mydefaultstack">            <!-- 集总定义的栈内容   -->
 5                 <interceptor-ref name="defaultStack"></interceptor-ref>
 6                 <interceptor-ref name="permissionInterceptor"></interceptor-ref>
 7             </interceptor-stack>
 8         </interceptors>
 9     </package>
10     <package name="user" namespace="/user" extends="mydefault">
11         <action name="login" class="cn.itcast.domain.User" method="login">  <!--用于处理 login.jsp 中提交的表单,登录的请求-->
12             <result name="success">/</result>
13             <result name="login">/login.jsp</result>
14         </action>
15         <action name="user_*" class="cn.itcast.domain.User" method="{1}">
16             <interceptor-ref name="mydefaultstack"></interceptor-ref>      <!--拦截器 引用-->

 

posted on 2014-06-04 22:05  wf110  阅读(388)  评论(0编辑  收藏  举报