如果需要提交的表单内容比较多,一个JSP页面不够用,就需要多个表单依次提交,最后一起汇总给
ActionServlet处理
JSP1页面(其中hidden字段很重要,表示是第一个提交页面)
<html>
<head>
<title>jsp1</title>
</head>
<bodybgcolor="#ffffff">
<html:formaction="/insertAction.do">
<html:hiddenproperty="page"value="1"/>
name:<html:textproperty="name"/>
pass:<html:textproperty="password"/>
<html:submit>submit
</html:submit>
</html:form>
</body>
</html>
JSP2页面
<html>
<head>
<title>jsp2</title>
</head>
<bodybgcolor="#ffffff">
<html:formaction="/insertAction.do">
<html:hiddenproperty="page"value="2"/>
city:<html:textproperty="city"/>
<html:submit>submit
</html:submit>
</html:form>
</body>
</html>
为两个页面建立共同的ActionForm,注意,scope要为session
publicclassInsertFormextendsActionForm...{
privateStringname=null;
privateStringpassword=null;
privateStringcity=null;
privateStringpage=null;
publicActionErrorsvalidate(ActionMappingactionMapping,
HttpServletRequest
httpServletRequest)...{
ActionErrorserrors=newActionErrors();
intnumpage=0;
try...{
numpage=newInteger(page).intValue();
}catch(Exceptionex)...{
}
if(numpage==1)...{
if((name==null)||(name.length()<1))...{
errors.add("name",newActionMessage("123"));
}
if((password==null)||(password.length()<1))...{
errors.add("password",newActionMessage("123"));
}
}
if(numpage==2)...{
if((city==null)||(city.length()<1))...{
errors.add("city",newActionMessage("123"));
}
}
returnerrors;
}
publicvoidreset(ActionMappingactionMapping,
HttpServletRequestservletRequest)...{
intnumpage=0;
try...{
numpage=newInteger(servletRequest.getParameter
("page")).intValue();
}catch(Exceptionex)...{
}
if(numpage==1)...{
name=null;
password=null;
}
if(numpage==2)...{
city=null;
}
}
publicStringgetCity()...{
returncity;
}
publicStringgetName()...{
returnname;
}
publicStringgetPage()...{
returnpage;
}
publicStringgetPassword()...{
returnpassword;
}
publicvoidsetPassword(Stringpassword)...{
this.password=password;
}
publicvoidsetPage(Stringpage)...{
this.page=page;
}
publicvoidsetName(Stringname)...{
this.name=name;
}
publicvoidsetCity(Stringcity)...{
this.city=city;
}
}
以上是两个html表单都对应I"nsertForm,在创建InsertForm时有以下几点需要注意
(1)提供html表单的隐藏字段page对应的page属性
(2)在reset方法中,只把和当前正在处理的表单相关的属性恢复为默认值
(3)在validate中,仅对和当前表单相关的属性进行验证
Struts-config.xml内容
<struts-config>
<form-beans>
<form-beanname="insertForm"type="untitled2.InsertForm"/>
</form-beans>
<action-mappings>
<actioninput="/jsp1.jsp"name="insertForm"
parameter="/jsp2.jsp"path="/insertAction"
scope="session"
type="org.apache.struts.actions.ForwardAction"
validate="true"/>
<actioninput="/jsp2.jsp"name="insertForm"
path="/insertAction2"scope="session"
type="untitled2.InsertAction2"validate="true"/>
</action-mappings>
<message-resourcesparameter="ApplicationResources"/>
</struts-config>
JSP1页面的action为/insertAction.do
JSP2页面的action为/insertAction2.do
分享到:
相关推荐
在Struts1.2中处理表单提交,特别是当表单数据包含列表对象时,需要理解一些核心概念和技术。这篇博客文章可能详细探讨了如何在Struts1.2中处理这类情况。 首先,让我们来了解Struts1.2中的表单提交流程。当用户在...
根据提供的文件信息,本文将详细解释“Struts2表单提交”中涉及到的关键知识点,包括如何在Java程序中获取MySQL数据库连接(地址、密码、权限)的过程。 ### Struts2框架简介 Struts2是Apache基金会下的一个开源...
对于第二种原因,即提交表单后刷新浏览器页面导致的重复提交,Struts2框架允许开发者通过配置结果视图的跳转方式来解决。默认情况下,Struts2使用的是dispatcher类型的forward跳转。为了避免刷新页面导致的重复提交...
在处理用户表单提交时,Struts框架可能会遇到一个常见的问题,即表单重复提交。这种情况通常发生在用户点击提交按钮后,由于网络延迟或其他原因导致请求被多次发送,从而可能对服务器端造成多次数据插入或更新,导致...
当用户提交表单时,框架会自动调用这些规则进行验证。 验证规则可以包括但不限于以下几种: - 必填字段检查 - 长度限制 - 数据类型检查(如整数、日期、邮箱地址等) - 自定义逻辑验证 如果验证失败,Struts...
在处理表单提交时,Struts2的`<s:form>`标签起着关键作用。它会自动将表单数据绑定到Action类的属性,并且提供了一些有用的功能,如表单验证、主题样式和URL映射等。一个基本的`<s:form>`标签示例如下: ```jsp ...
- 当用户提交表单时,服务器会在Action中生成一个唯一的token,并将其保存在session中,同时将该token作为隐藏字段回显到表单。 - 用户再次提交表单时,`TokenInterceptor`会检查session中的token是否与请求参数中...
在Struts2中,表单标签是用于构建用户界面的重要组件,它们帮助开发者创建交互式和动态的网页。这篇博客将深入探讨Struts2中的表单标签及其使用方法。 首先,我们需要理解Struts2表单标签的基本结构。通常,一个...
1. **表单重复提交问题**:当用户在提交表单时,由于网络延迟或用户误操作,可能会导致同一个表单被多次提交。例如,在购物网站上,用户可能因点击按钮太快而无意中购买了多份商品。 2. **Struts2框架**:Struts2是...
4. **处理请求**:当用户提交表单后,Struts2会自动将所有列出的DataModel对象绑定到Action类的dataList属性。在execute方法中,我们可以遍历这个list,并调用DAO或Service层方法将数据保存到数据库。 ```java for ...
为了实现在Struts框架下多行数据的动态添加与提交,我们可以利用JavaScript来动态生成表单元素。具体来说,就是通过JavaScript函数在用户界面上动态添加新的表单行,每一行包含多个输入框,用于收集不同的数据字段。...
struts2防止表单重复提交,利用struts的拦截器tokenSession,轻轻松松解决表单重复提交的问题。 附件为源代码,后台延迟了3秒,可直接在web服务器下部署运行,输入用户名和密码后,多点几次提交按钮,然后看控制台...
当用户提交表单后,Struts2会调用匹配的Action类的`execute()`方法,此时,`name`和`email`属性已经被填充了表单数据。你可以在这里进行数据验证、业务处理等操作。 至于结果页面,Struts2支持JSP、FreeMarker、...
当用户提交表单时,Struts会自动将表单数据填充到ActionForm Bean的相应属性中,以便在控制层进行处理。 表单验证主要通过覆盖ActionForm的`validate()`方法来实现。这个方法会在用户提交表单后,Action类执行之前...
首先,理解表单重复提交的场景:用户在提交表单后,由于网络延迟或其他原因,可能会无意中多次点击提交按钮。如果服务器没有处理这些重复请求,那么相同的数据可能会被多次插入数据库,导致错误。 Struts2的解决...
在提交事件处理函数中,可以再次调用formValidator的validate方法确保数据有效,然后使用Ajax提交表单,这样可以实现无刷新的用户体验。 6. **Struts2 Action处理**:在后台,Struts2 Action会接收到Ajax请求,对...
在提供的压缩包文件"Struts5.0"中,可能包含了Struts的示例代码、配置文件和其他相关资源,你可以通过这些资源深入了解和学习如何在实际项目中运用Struts动态表单。通过实践这些实例,你可以更好地理解Struts动态...
3. **验证令牌**:当用户提交表单时,`token`拦截器会检查请求参数中的令牌值与Session中的令牌值是否匹配。如果匹配,拦截器会清除Session中的令牌并继续执行Action;如果不匹配,表示可能有重复提交,Action将返回...
- 运行项目,通过浏览器提交表单,查看数据是否成功保存到数据库。 这个小项目不仅展示了Struts2处理表单提交的基本流程,还涉及了数据库操作、数据验证和MVC模式的运用。理解并掌握这些步骤,将有助于你在面试中...