在这里我是通过新加一个flag来判断它是否是重复提交,从而截断其多次提交。
这个flag是在我要提交表单的这支jsp里面存入session里面的,同时在表单中使用<input type="hidden">把该flag值传入action,再在action中分别通过request.getParameter("flag")
和request.getSession.getAttribute("flag")来获取我的这个flag进行比较它们是否相等来判断是否提交。具体事例见如下:
1、首页看一个简单的preview.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ page import="java.util.*"%>
<%
String validate_imageURL = request.getContextPath() + "/validate/validate_image.jsp";
response.setHeader("Cache-Control", "no-cache");
Random rand = new Random();
Integer flag = new Integer(rand.nextInt());
String str_flag = flag.toString();
session.setAttribute("sflag", str_flag);
%>
<s:form action="publicMessage" name="form1" method="post" theme="simple">
<input type=hidden name="sflag" value="<%=str_flag%>" />
<input type="text" name="name" value="">
<input type="submit" value='发表' class="reSubmit" >
</s:form>
2、 对应的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> <package name="message" extends="yepbook-public"> <action name="publicMessage" class="lee.BugLogAction" method="publicMessage"> <result name="success" type="tiles">message.leave.layout</result> <result name="error" type="tiles">message.leave-error.layout</result> </action> </package> </struts>
3、对应的class文件lee.PublicAction.java
package lee;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts2.interceptor.ServletRequestAware;
import com.opensymphony.xwork2.ActionSupport;
public class BugLogAction extends ActionSupport implements ServletRequestAware
{
public static final Log log = LogFactory.getLog(BugLogAction.class);
private HttpServletRequest request;
public String publicMessage()
{
try{
Integer flag1 = new Integer(Integer.parseInt(request.getParameter("sflag")));
String l_strflag1 = flag1.toString();
if (l_strflag1.equals(request.getSession().getAttribute("sflag")))
{
String name= request.getParameter("name");
//其它要进行的操作 ...
request.getSession().removeAttribute("sflag");
}
else
{
request.getSession().removeAttribute("sflag");
log.warn("message save repeat");
}
}catch (Exception e)
{
e.printStackTrace();
log.error(StringUtil.getStackTraceAsString(e));
return ERROR;
}
return SUCCESS;
}
public void setServletRequest(HttpServletRequest request)
{
this.request = request;
}
}