防止表单重复提交其实就是struts2的一个拦截器的使用;

struts.xml配置文件:

 <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd"> <struts>
<constant name="struts.ui.theme" value="simple" />
<!-- struts2在防止表单重复提交的拦截中有2个,分别是:token,tokenSession。tokenSession继承token而来。
通常情况下,使用tokenSession客户端感觉会比较友好。 -->
<!-- 如果重复提交,会跳转到error.jsp页面 -->
<package name="person" namespace="/test" extends="struts-default">
<action name="token" class="com.ljq.action.PersonAction">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="token" />
<!-- 如果重复提交,跳转到error.jsp页面 -->
<result name="invalid.token">/WEB-INF/page/error.jsp</result>
<result>/WEB-INF/page/message.jsp</result>
</action>
<action name="tokenSession" class="com.ljq.action.PersonAction">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="tokenSession" />
<!-- 如果重复提交,不会跳转到error.jsp页面 -->
<result name="invalid.token">/WEB-INF/page/error.jsp</result>
<result>/WEB-INF/page/message.jsp</result>
</action>
</package>
</struts>

Action类:

 package com.action;
import java.util.ArrayList;
import java.util.List;
public class PersonAction {
private String name;
public String execute() {
System.out.println(name);
return "success";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

index.jsp表单页面:

 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>防止表单重复提交</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
</head>
<body>
<!-- 防止表单重复提交,记得在form表单里填上<s:token></s:token> -->
<!-- action="token"、action="tokenSession" -->
<s:form action="token" namespace="/test" method="post">
姓名:<s:textfield name="name"/>
<s:token></s:token>
<input type="submit" value="发送"/>
</s:form>
</body>
</html>

message.jsp返回成功页面:

 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
</head>
<body>
<s:property value="name"/>
</body>
</html>

error.jsp表单重复提交提示页面:

 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'error.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
</head>
<body>
您已经提交了表单,请不要重复提交。
</body>
</html>

最新文章

  1. TransactionScope oracle不能用的问题(转载)
  2. iOS创建、删除文件夹、获取沙盒路径
  3. WordPress使用固定链接
  4. Spring(五)AOP简述
  5. erlang常用命令
  6. mysql5.6子查询的优化
  7. mysql基本知识
  8. World Wind Java开发之十五——载入三维模型
  9. Jquery 类似新浪微博,鼠标移到头像,用浮动窗口显示用户信息,已做成一个jquery插件
  10. Activity的生命周期与加载模式——Activity的生命周期演示
  11. 在Web中获取MAC地址
  12. JMeter 配置元件之随机变量(RandomVariable)介绍
  13. spring JdbcTemplate数据库
  14. “全栈2019”Java多线程第三十一章:中断正在等待显式锁的线程
  15. Windows和linux下clock函数
  16. 算法笔记_199:第二届蓝桥杯软件类决赛真题(C语言本科)
  17. 可视化库-seaborn-回归分析绘图(第五天)
  18. JavaScript unshift()函数移入数据到数组第一位
  19. 如何利用Framework模型生成IQD文件
  20. Libusb学习

热门文章

  1. [知了堂学习笔记]_JSON数据操作第2讲(JSON的封装与解析)
  2. Java基础---其他对象
  3. pomelo 安装 windows 下
  4. AHD-模拟高清芯片RN6752替代TVP5150/CJC5150
  5. XMind与MindManager哪个好(网易云课堂老师:Array老师讲解稿)
  6. [C#] 如何截取完整的网页图片
  7. MEF IOC使用
  8. ireport导出中英文pdf
  9. makefile中&quot;:=&quot;,&quot;=&quot;,&quot;?=&quot;,&quot;+=&quot; 之间的区别
  10. jQuery常用工具方法