浏览 16277 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-02-20
总结出来,希望对初学者有所帮助. 建一个Insert.jsp页面代码如下: <%@ page contentType="text/html;charset=UTF-8" language="java"%> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <html:html locale="true"> <head> <html:base /> <title>insert.jsp</title> </head> <body> <html:form action="insert" method="post"> <bean:message key="label.name"/><html:text property="name" /> <bean:message key="label.phone"/><html:text property="phone"/> <bean:message key="label.address"/><html:text property="address"/> <html:submit ><bean:message key="modify.add"/></html:submit> <html:reset><bean:message key="button.reset"/></html:reset> </html:form> <html:errors/> </body> </html:html> 建一个InsertAction代码如下: //Created by MyEclipse Struts // XSL source (default): platform:/plugin/com.genuitec.eclipse.cross.easystruts.eclipse_4.1.1/xslt/JavaClass.xsl package com.yourcompany.struts.action; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionError; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import com.yourcompany.bean.ListBean; import com.yourcompany.struts.form.ModifyForm; /** * MyEclipse Struts * Creation date: 02-20-2007 * * XDoclet definition: * @struts.action validate="true" */ public class InsertAction extends Action { public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { ModifyForm modifyForm = (ModifyForm) form; //得到token String token_request =request.getParameter("org.apache.struts.taglib.html.TOKEN"); //打出来看看是什么东东 System.out.println("token in request is:"+ token_request); ActionErrors errors = new ActionErrors(); //判断token是否有效,如果为假证明有重复提交,声明一个错误信息,并反馈出来 if(!isTokenValid(request)){ errors.add("insettoken",new ActionError("error.invalid.token")); saveErrors(request, errors); saveToken(request); return (new ActionForward(mapping.getInput())); } //当用户首次提交时返!isTokenValid()返回true else{ resetToken(request); } int result=new ListBean().add(modifyForm); if(result==1){ return mapping.findForward("addlist"); }else{ return mapping.findForward("error"); } } } 建一个PrepareInsertAction代码如下: package com.yourcompany.struts.action; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; /** * MyEclipse Struts * Creation date: 02-20-2007 * * XDoclet definition: * @struts.action validate="true" */ public class PrepareInsertAction extends Action { public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { System.out.print("hello PrepareInsertAction"); //创建一个新的令牌 saveToken(request); return mapping.findForward("inserttoken"); } } 详细代码见附件的源码.程序里我已经写了相关的注释. 希望对大家能有所帮助. 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-02-28
这个问题我正是比较想知道的.
因为有的用户会"回退"或是提交再刷新. |
|
返回顶楼 | |
发表时间:2007-06-20
第一次 提交后,再退回来再提交的话,的确是阻止了重复提交,
但是再多点几次,就出现问题了,多点了几次,就阻止不了了。 |
|
返回顶楼 | |
发表时间:2007-06-20
解决关于STRUTS的重复提交只有用TOKEN这一种方法吗?
感觉很麻烦,在每一个ACTION中都要加入那些代码. 是不是还有别的更好的方法呢? |
|
返回顶楼 | |
发表时间:2007-06-20
InsertAction 类中的
if(!isTokenValid(request)){ errors.add("insettoken",new ActionError("error.invalid.token")); saveErrors(request, errors); saveToken(request); return (new ActionForward(mapping.getInput())); } 中的 saveToken(request) 应该改为resetToken(request) 这样的话,才能真正解决重复提交问题 |
|
返回顶楼 | |