//解決二次提交問題(提交前)
preSubmitValid(servletRequest,servletResponse);
//解決二次提交問題(提交)
if(!submitValid(servletRequest,servletResponse))
try
{
servletResponse.sendRedirect("public/repeatdeal.jsp");
return null;
}
catch (Exception error)
{
servletRequest.setAttribute("errorMSG", "重復提交造成頁面跳轉出錯:" + error.getMessage());
}
/**
* 解決二次提交問題(提交前)
* @param request
* @param response
*/
public void preSubmitValid(HttpServletRequest servletRequest,HttpServletResponse response)
{
counter = -1;
servletRequest.getSession().setAttribute("submissioncount",
new Integer(counter));
/**
* 重要:
* 通過調用 saveToken(request)方法,動態生成一個token,并且存放到session中,
* 以便在以后可以在動態生成的頁面中加入隱藏字段 <input type="hidden" name="org.apache.struts.taglib.html.TOKEN" value="動態值">
* 只要調用了該方法,此后包含<html:form...>標簽的頁面中都會動態生成上面所說的隱藏字段。
*/
this.saveToken(servletRequest);
}
/**
* 提交驗證,檢驗是否是重復提交,如果重復提交跳轉到統一處理頁面
* @param servletRequest
* @param servletResponse
* @return
*/
public boolean submitValid(HttpServletRequest servletRequest,HttpServletResponse servletResponse)
{
counter += 1;
servletRequest.getSession().setAttribute("submissioncount",new Integer(counter));
if (!this.isTokenValid(servletRequest))
return false;
/**
* 在認可了用戶的合法提交后,一定要調用resetToken(request)重置token,這樣session中就沒有相應的token啦
* 這樣才能夠保證用戶再次提交相應數據時,能夠檢測出來。
*/
this.resetToken(servletRequest);
return true;
}