戶回退到剛才的提交頁面并再次提交的話,客戶端傳過來的令牌就和服務器端的令牌不一致,從而有效地防止了重復提交的發生?!?/div>
if (isTokenValid(request, true)) {
// 表單不是重復提交
//這里是保存數據的代碼
} else {
//表單重復提交
saveToken(request);
//其它的處理代碼
}
網上例子為證:
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
UserForm userForm = (UserForm)form;
if(!isTokenValid(request)){
saveToken(request);
userForm.setMessage("重復提交");
return mapping.findForward("failure");
}
else{
resetToken(request);
}
request.setAttribute("user", userForm);
return mapping.findForward("success");
}
}
模板經典例子:
public ActionForward save(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws BaseException {
if (!isTokenValid(request)) { // 如果指令無效,則屬于重復提交
return (new ActionForward(mapping.getInput()));
} else {
resetToken(request);
}
BaseDao dao = DAOFactory.getDao(getEntityDAOClassName());
dao.begingTransaction();
Class cls = dao.getEntityClass();
try {
BaseVO vo = (BaseVO) cls.newInstance();
DataTrans.copyProperties(vo, form);
this.saveEx(mapping, form, request, response, vo);
dao.save(vo);
dao.commitTransaction();
} catch (Exception e) {
dao.rollback();
throw new BaseException("保存數據出現異常");
} finally {
dao.sessionClose();
}
return mapping.findForward("saveSuccess");
}
posted on 2011-12-02 09:32
kxbin 閱讀(761)
評論(0) 編輯 收藏 所屬分類:
J2EE