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页面中

     <s:form action="token" namespace="/" >
<s:token></s:token>
<s:textfield label="姓名" name="userName"/> 姓名
<br/>
<s:textfield label="年龄" name="age"/> 年龄
<br/>
<s:textfield label="密码" name="password"/>密码
<br/>
<s:textfield name="birthday"/>生日
<br/>
<s:submit value="提交" />
</s:form>

struts.xml中

 <constant name="struts.devMode" value="true" />
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false"></constant>
<constant name="struts.custom.i18n.resources" value="itcast"></constant>     <!--只要继承了mypackage的 默认 都有个 返回结果 name="error"的,在token那个action那里就不用写 name="error" 结果处理了-->
<package name="mypackage" extends="struts-default">
<global-results>
<result name="error">/error.jsp</result>
</global-results>
</package>
<package name="token" extends="mypackage">
<action name="token" class="cn.itcast.action.PersonAction">
      <!--如果单单写 name="token" 会丧失 defaultStack 拦截器提供的 那些功能, 默认是 defaultStack 提供的那些功能
        但是一写其他拦截器,所以它也要加上-->
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="token"></interceptor-ref>
      <!--实际上用到了token的拦截器, 拦截器返回值就是 invalid.token字符串,通过源码可以看到-->
<result name="invalid.token">/token.jsp</result>  <!--无效的时候返回的页面 一般返回到success.jsp就可以了-->
<result name="success">/success.jsp</result>
<result name="input">/submit.jsp</result>
</action>
</package>
</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
  <package name="mydefault" extends="struts-default">
<interceptors>
<interceptor name="permissionInterceptor" class="cn.itcast.interceptor.PermissionInterceptor"></interceptor>
<interceptor-stack name="mydefaultstack">            <!-- 集总定义的栈内容 -->
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="permissionInterceptor"></interceptor-ref>
</interceptor-stack>
</interceptors>
</package>
<package name="user" namespace="/user" extends="mydefault">
<action name="login" class="cn.itcast.domain.User" method="login">  <!--用于处理 login.jsp 中提交的表单,登录的请求-->
<result name="success">/</result>
<result name="login">/login.jsp</result>
</action>
<action name="user_*" class="cn.itcast.domain.User" method="{1}">
<interceptor-ref name="mydefaultstack"></interceptor-ref>      <!--拦截器 引用-->

Struts2中防止表单重复提交,global-results定义全局结果处理的更多相关文章

  1. Struts2中解决表单重复提交

    3. 表单的重复提交问题 1). 什么是表单的重复提交 > 在不刷新表单页面的前提下:  >> 多次点击提交按钮 >> 已经提交成功, 按 "回退" ...

  2. 【Struts2】防止表单重复提交

    一.概述 二.Struts2中解决方案 三.实现步骤 一.概述 regist.jsp----->RegistServlet 表单重复提交 危害: 刷票. 重复注册.带来服务器访问压力(拒绝服务) ...

  3. struts2之防止表单重复提交

    struts.xml配置文件 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts ...

  4. struts2的防止表单重复提交

    防止表单重复提交其实就是struts2的一个拦截器的使用: struts.xml配置文件: <?xml version="1.0" encoding="UTF-8& ...

  5. 使用js控制表单重复提交(1加锁,2事件方式,3 EasyUI中解决表单重复提交)

    方法一. var flag = true; $(function() { $("#interested").click(function() { beInterested(); } ...

  6. [原创]java WEB学习笔记73:Struts2 学习之路-- strut2中防止表单重复提交

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  7. struts2 token 防止表单重复提交

    1.jsp页面  输入框,提交按钮 <%@ page language="java" contentType="text/html" pageEncodi ...

  8. Java中避免表单重复提交

    表单的重复提交: 没有完整的进行一次,先请求表单页面->再提交表单过程而完成数据提交 造成的根本原因: 没有完整的进行一次,先请求表单页面->再提交表单过程. 造成重复提交的现象: 由于服 ...

  9. Struts(二十七):使用token或tokenSession防止表单重复提交

    什么是表单重复提交 表单重复提交包括以下几种情况: 前提:不刷新表单页面 1.多次点击“提交”按钮后,重复提交了多次: 2.已经提交成功之后,按“回退”按钮之后,在点击“提交”按钮后,提交成功: 3. ...

随机推荐

  1. 初见Python<5>:条件、循环和其他语句

    1.使用逗号输出 使用逗号隔开,可以打印多个表达式.打印后,各项之间自动以一个空格隔开. 也可以同时输出文本和变量值. 可以和字符串连接符“+”一起使用.   2.从模块中导入函数 从模块导入函数的方 ...

  2. POJ3480 John 博弈论 anti-nim anti-SG

    http://poj.org/problem?id=3480 anti-nim其实是anti-SG的一种,就像nim是sg的一种一样.(或者说sg是nim推广?) 看名字就是规则和nim相反,取到最后 ...

  3. [Codeforces #188] Tutorial

    Link: Codeoforces #188 传送门 A: 先全转为正数,后面就全是指数级增长了 #include <bits/stdc++.h> using namespace std; ...

  4. hdu 1251 (Trie水题)

    统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others)Total Submi ...

  5. 【转载】随机生成k个范围为1-n的随机数,其中有多少个不同的随机数?

    来源:http://www.cnblogs.com/haolujun/archive/2012/11/11/2765102.html 假如现在让你随机生成k个范围在1-n内的随机数,那么你能得到多少个 ...

  6. 【哈希】CDOJ1717 京电的神秘矩阵

    对每个矩阵里的元素用两个大素数做双关键字哈希,丢进set即可. #include<cstdio> #include<iostream> #include<set> ...

  7. 利用cURL请外部接口

    昨天有一个需求,就是需要把获取到的百度地图信息存储到百度地图LBS云储存上 看了一下LBS云储存,说白了就是通过接口操作云数据库,所以写了一个通用的cURL函数 代码如下: /** * @param ...

  8. Dependent Parameters in Concurrent Program using Special Value Set

    Dependent Parameters in Oracle Applications Requirement: Say there is a concurrent program that lets ...

  9. mac 安装 composer

    使用 curl 指令下载: curl -sS https://getcomposer.org/installer | php 或是沒有安裝 curl ,也可以用 php 指令下载: php -r &q ...

  10. juqery.fn.extend和jquery.extend

    jquery.fn == jquery.prototype //true jquery.extend( obj1,obj2 ) 用一个或多个对象来拓展一个对象,返回拓展之后的对象 var aaa = ...