Posted on 2007-05-28 15:38
change 阅读(199)
评论(0) 编辑 收藏
//解决二次提交问题(提交前)
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;
}