zoukankan      html  css  js  c++  java
  • struts2 表单重复提交

    首先,如果你打算使用strut2处理表单重复提交的功能,那么你一定要在你的表单中加上<s:token></s:token>,无论你使用的是html的form标签,还是<s:form></s:form>.

    先说一下原理,我们都知道session有一个sessionId字符串作为这个session的身份标识,服务器根据这个sessionId来判断是否是同一个session,类似的struts利用<s:token>产生一个唯一的字符串,作为表单的身份标志,同时在服务器端备份了此字符串标志,当表单提交之后,服务器比较两个字符串是否相同,相同则执行action,同时把服务器这边的字符串重置为新的字符串,从而当同一个表单第二次提交时,由于身份标志不同导致不能重复提交,想了解的更多可以参考http://www.cnblogs.com/iyangyuan/archive/2013/05/05/3060488.html

    原理讲完了谈下具体的步骤

    1.使用<s:token></s:token>标签

    2.使用token或者tokenSession

     1 <package name="testtoken"  namespace="/" extends="struts-default">
     2            <!-- 使用token -->
     3            <action name="token_*" class="com.itcast.c_token.TestToken" method="{1}">
     4                <result name="success">/index.jsp</result>
     5                <!-- 使用tokenSession无需指定invalid.token -->
     6                <result name="invalid.token">/message.jsp</result>
     7                
     8                <!-- 重定向处理重复提交:这样在index页面刷新不会重复提交但退回到login页面仍然可以重复提交 -->
     9                <!-- <result name="success" type="redirect">/index.jsp</result> -->
    10            
    11            <interceptor-ref name="defaultStack"></interceptor-ref>
    12            <!-- 解决了问题,但是是在用户提交之后才进行提示 -->
    13            <interceptor-ref name="token"></interceptor-ref>
    14            </action>
    15            
    16            
    17            <!-- 使用tokenSession的方式 -->
    18            <action name="token2_*" class="com.itcast.c_token.TestToken" method="{1}">
    19                <result name="success">/index.jsp</result>
    20                
    21            <interceptor-ref name="defaultStack"></interceptor-ref>
    22            <!-- 用户可以多次重复提交,但是只处理一次 -->
    23            <interceptor-ref name="tokenSession">
    24                <!-- <param name="includeMethods">xx</param> 拦截哪些方法-->
    25            </interceptor-ref>
    26            </action>
    27     </package>

    注意事项:

    1.不要忘记加上默认的拦截器,因为这两个拦截器并不在缺省的拦截器中

    2.使用tokenSession的方式时,不需要指定invalid.token的页面,因为tokenSession和token的不同在于前者无论用户提交多少次,只会处理一次,响应的是提交后的页面,而后者重复提交多次会产生一个name为invalid.token的result,显示一个错误页面,可以通过配置result进行解决

    3.使用时要注意拦截哪些方法,否则极有可能导致一些正常的跳转行为出现问题

  • 相关阅读:
    LeetCode
    LeetCode
    LeetCode
    LeetCode
    LeetCode
    LeetCode
    Python, pandas: how to sort dataframe by index// Merge two dataframes by index
    永久修改VS include目录
    <OFFER05> 05_ReplaceSpaces替换空格
    用二叉树进行排序 x (从小到大)
  • 原文地址:https://www.cnblogs.com/tele-share/p/7487787.html
Copyright © 2011-2022 走看看