새로 고침 상황 에서 양식 을 중복 제출 하 는 문 제 를 처리 합 니 다.

여기 서 나 는 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;
	}
}

좋은 웹페이지 즐겨찾기