防止表单重复提交其实就是struts2的一个拦截器的使用;
struts.xml配置文件:
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE struts PUBLIC 3 "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 4 "http://struts.apache.org/dtds/struts-2.0.dtd"> 5 6 <struts> 7 <constant name="struts.ui.theme" value="simple" /> 8 <!-- struts2在防止表单重复提交的拦截中有2个,分别是:token,tokenSession。tokenSession继承token而来。 9 通常情况下,使用tokenSession客户端感觉会比较友好。 --> 10 <!-- 如果重复提交,会跳转到error.jsp页面 --> 11 <package name="person" namespace="/test" extends="struts-default"> 12 <action name="token" class="com.ljq.action.PersonAction"> 13 <interceptor-ref name="defaultStack" /> 14 <interceptor-ref name="token" /> 15 <!-- 如果重复提交,跳转到error.jsp页面 --> 16 <result name="invalid.token">/WEB-INF/page/error.jsp</result> 17 <result>/WEB-INF/page/message.jsp</result> 18 </action> 19 <action name="tokenSession" class="com.ljq.action.PersonAction"> 20 <interceptor-ref name="defaultStack" /> 21 <interceptor-ref name="tokenSession" /> 22 <!-- 如果重复提交,不会跳转到error.jsp页面 --> 23 <result name="invalid.token">/WEB-INF/page/error.jsp</result> 24 <result>/WEB-INF/page/message.jsp</result> 25 </action> 26 </package> 27 </struts>
Action类:
1 package com.action; 2 import java.util.ArrayList; 3 import java.util.List; 4 public class PersonAction { 5 private String name; 6 public String execute() { 7 System.out.println(name); 8 return "success"; 9 } 10 public String getName() { 11 return name; 12 } 13 public void setName(String name) { 14 this.name = name; 15 } 16 }
index.jsp表单页面:
1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <%@ taglib uri="/struts-tags" prefix="s"%> 3 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 4 <html> 5 <head> 6 <title>防止表单重复提交</title> 7 <meta http-equiv="pragma" content="no-cache"> 8 <meta http-equiv="cache-control" content="no-cache"> 9 <meta http-equiv="expires" content="0"> 10 </head> 11 <body> 12 <!-- 防止表单重复提交,记得在form表单里填上<s:token></s:token> --> 13 <!-- action="token"、action="tokenSession" --> 14 <s:form action="token" namespace="/test" method="post"> 15 姓名:<s:textfield name="name"/> 16 <s:token></s:token> 17 <input type="submit" value="发送"/> 18 </s:form> 19 </body> 20 </html>
message.jsp返回成功页面:
1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <%@ taglib uri="/struts-tags" prefix="s"%> 3 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 4 <html> 5 <head> 6 <title>My JSP 'index.jsp' starting page</title> 7 <meta http-equiv="pragma" content="no-cache"> 8 <meta http-equiv="cache-control" content="no-cache"> 9 </head> 10 <body> 11 <s:property value="name"/> 12 </body> 13 </html>
error.jsp表单重复提交提示页面:
1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <%@ taglib uri="/struts-tags" prefix="s" %> 3 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 4 <html> 5 <head> 6 <title>My JSP 'error.jsp' starting page</title> 7 <meta http-equiv="pragma" content="no-cache"> 8 <meta http-equiv="cache-control" content="no-cache"> 9 </head> 10 <body> 11 您已经提交了表单,请不要重复提交。 12 </body> 13 </html>