zoukankan      html  css  js  c++  java
  • 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>      <!--拦截器 引用-->
  • 相关阅读:
    git clone --early EOF
    weex 小结 -- <list>
    weex 小结 --官方扩展组件
    weex 小结--内建模块
    viewPager 的可滑动 Title
    viewPager + fragment
    onInterceptTouchEvent / onTouchEvent响应事件的详析
    startActivity跳转失败而且没有异常信息
    ios2048
    插入排序
  • 原文地址:https://www.cnblogs.com/friends-wf/p/3768783.html
Copyright © 2011-2022 走看看