解决|问题|重复|重复提交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>PrepareInsertAction代码如下: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"); }}InsertAction代码如下: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"); } } }ModifyForm代码如下:public class ModifyForm extends ActionForm { public void reset(ActionMapping mapping, HttpServletRequest request) {this.address=null;this.name=null;this.phone=null; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getId() { return id; } public void setId(String id) { this.id = id; }}Struts-config.xml配置如下:<struts-config> <data-sources /> <form-beans > <form-bean name="modifyForm" type="com.lyx.struts.form.ModifyForm" /> </form-beans> <global-exceptions /> <global-forwards> <forward name="inserttoken" path="/tokeninsert.jsp"/> </global-forwards> <action-mappings > <!--插入记录时token检验第一个跳的action --> <action path="/prepareInsert" type="com.lyx.struts.action.PrepareInsertAction" /><!--插入记录时token检验后的第二个action --><action attribute="modifyForm" input="/tokeninsert.jsp" name="modifyForm" path="/insert" scope="request" type="com.lyx.struts.action.InsertAction" /> </action-mappings> <message-resources parameter="com.lyx.struts.ApplicationResources" /></struts-config>Applicationresources.properties配置如下:error.invalid.token=repeatsubmitlabel.user=usernamelable.phone=phonelabel.address=addressmodify.add=addlabel.tokeninsert=tokeninsertbutton.reset=reset
Struts解决重复提交问题
80酷酷网 80kuku.com