需要对用户输入的信息在不同的页面进行校验时,常常会使用到Struts MPV(Multi Page Validation)机能。
假设有如下需求
用户在第一个name页面输入firstName和lastName,校验通过后点击next按钮,进入输入address的页面。
在address页面中,如果点击previous按钮,则不会对address页面进行校验,直接返回name页面。点击提交按钮,如果校验通过,则进入成功页面。
实现
要实现上述的需求,可以使用struts MPV机能来实现。
1.定义form-bean
将需要校验的所有属性都定义在此form(MPVTestForm)中,此需求中包括firstName,lastName,address。并且该form需要继承ValidatorForm或其子类
2.jsp页面
新做成两个jsp页面,name.jsp和address.jsp
name.jsp
<html:form action="/name"> <br/> first name: <html:text name="MPVTestForm" property="firstName" maxlength="10"/><html:errors property="firstName" /> <br/> last name: <html:text name="MPVTestForm" property="lastName" maxlength="10"/><html:errors property="lastName" /> <br/> <html:hidden property="page" value="1"/> <br/> <html:submit value="Submit"/> </html:form>
action为“/name”,form为MPVTestForm,输入firtName和lastName。
这里要注意的是:页面中定义了一个隐藏参数page,具体用法后面说明。
当点击submit按钮时,传入的page的值为1
address.jsp页面
<html:form action="/address"> Street address: <html:text name="MPVTestForm" property="streetAddress" maxlength="10"/><html:errors property="streetAddress" /> <br/> <br/> <input type="hidden" name="previous" value="previous"/> <input type="hidden" name="page" value="2"/> <html:errors property="illegalpage"/> <br/> <html:submit value="previous" onclick="this.form.page.value='1'"/> <html:submit value="submit"/> </html:form>
action为“/address”,form为MPVTestForm,输入address。
当点击previous按钮时,传入的page的值为1
当点击submit按钮时,传入的page的值为2
3.multi page的实现
struts的定义文件
<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"> <struts-config> <form-beans> <form-bean name="MPVTestForm" type="com.sjl.MPVTestForm"/> </form-beans> <action-mappings> <action path="/name" type="com.sjl.MPVTestAction" name="MPVTestForm" scope="session" input="/jsp/name.jsp"> <forward name="name" path="/jsp/name.jsp"/> <forward name="address" path="/jsp/address.jsp"/> </action> <action path="/address" type="com.sjl.MPVTestAction1" name="MPVTestForm" scope="session" input="/jsp/address.jsp"> <forward name="name" path="/jsp/name.jsp"/> <forward name="done" path="/jsp/done.jsp"/> <forward name="address" path="/jsp/address.jsp"/> </action> </action-mappings> <message-resources parameter="MessageResources" /> <plug-in className="org.apache.struts.validator.ValidatorPlugIn"> <set-property property="pathnames" value="/WEB-INF/validator-rules.xml, /WEB-INF/validation.xml"/> </plug-in> </struts-config>
4.validation的实现
上面的name.jsp和address.jsp中都定义了一个隐藏的参数page。这个page的作用就是为了实现validation机能,首先看下struts的validation.xml文件的定义。
validation.xml
<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE form-validation PUBLIC "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.3.0//EN" "http://jakarta.apache.org/commons/dtds/validator_1_3_0.dtd"> <form-validation> <formset> <form name="MPVTestForm"> <field property="firstName" depends="required1" page="1"/> <field property="lastName" depends="required2" page="1"/> <field property="streetAddress" depends="required3" page="2"/> </form> </formset> </form-validation>
name.jsp页面中点击submit按钮,传入的page值为1,等于此xml中firstName和lastNamefield的page的值,就会对name页面中的firstName和lastName进行required校验。
MPVTestAction
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { MPVTestForm testActionform = (MPVTestForm) form; int page = testActionform.getPage(); ActionMessages errors = testActionform.validate(mapping, request); if (errors != null && errors.isEmpty()) { if (page == 1) {//页面上没有错,page为1,跳转到address.jsp return mapping.findForward("address"); } } else { this.saveErrors(request, errors); if (page == 1) {//页面上有错,page为1,停留在name.jsp return mapping.findForward("name"); } } return mapping.findForward("name"); }
address.jsp页面中点击previous按钮,返回name页面,传入的page值为1,不等于此xml中streetAddress field的page的值(2),所以不会对此时的address页面的streetAddress进行required校验。
address.jsp页面中点击submit按钮,传入的page值为2,等于此xml中streetAddress field的page的值(2),就会对streetAddress进行required校验。
MPVTestAction1
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { MPVTestForm testActionform = (MPVTestForm) form; int page = testActionform.getPage(); ActionMessages errors = testActionform.validate(mapping, request); if (errors != null && errors.isEmpty()) { if (page == 1) {//页面上没有错,page为1,跳转到name.jsp return mapping.findForward("name"); } if (page == 2) {//页面上没有错,page为2,跳转到done.jsp return mapping.findForward("done"); } } else { if (page == 1) {//页面上有错,page为1,跳转到name.jsp return mapping.findForward("name"); } if (page == 2) {//页面上有错,page为2,仍停留在address.jsp this.saveErrors(request, errors); return mapping.findForward("address"); } } errors.add("illegalpage", new ActionMessage("The page property of this page is illegal!",false)); this.saveErrors(request, errors); return mapping.findForward("address"); }
相关推荐
56 -营销总监绩效考核表1
数据介绍 本文分享一份全国范围的土地利用分类数据。 该数据来源于Esri,以Sentinel-2卫星的遥感图作为数据源,并结合人工智能土地分类模型制作而成。 该数据的时间范围是2017年-2023年,空间分辨率是10米,地理坐标系是WGS-84。
软件测试
质检员考核评分表
技术路线图的设计对于基金本子的质量起着决定性的作用,在具体设计时候,往往需要有一定的套路和创意。本资源汇总了海量的经济管理类技术路线图,共大家参考,学习,使用。适用于国自科,社科,本硕博毕业论文等。
1.资料名称:2021-1998年城投公司数据大全 2.数据指标:序号、公司名称、区域、城投评分、省内排名、最新主体评级、行政等级、 股东背景、股权关系、平台重要性、城投口径、实控人、 总资产(亿元)、 货币资金(亿元)、土地资产(亿元)、受限资产(亿元)、应收账款(亿元) 应收类款项政府占比(%)、营业收入(亿元)、公益性&准公益性主营占比(%)、归母净利润(亿元)、政府补助(亿元)、总资产报酬率(%)、有息债务(亿元)、 短期债务(亿元)、借款(亿元)、债券余额(亿元)、私募债占比(%)、 非标融资(亿元)、资产负债率(%)、债务资本化比率(%) 对外担保比例(%)、EBITDA/利息(倍)、EBITDA全部债务比(%)、授信余额(亿元)、 最新报告期 、申万行业 城投公司是城市建设投资公司的简称,是全国各大城市政府投资融资平台,起源于1991年,承担相应的政府职能,是特殊市场经营体。 此类城投公司大多是不具备盈利能力的,属于事业单位或者国有独资公司性质,他们是通过政府补贴的方式实现盈利,属于带有政府性质的特殊市场经营体。
14 网络地址转换.pptx
网络运维过程中华为交换机经常使用的基础命令
人力资源管理工具绩效考核excel模板04
57 -营业部经理绩效考核表1
汽车疲劳耐久性试验数据采集及应用详解:从路谱采集到技术培训,全面解析的69页指南,汽车疲劳耐久性试验数据采集与应用,汽车耐久路谱采集与应用培训,69页 ,核心关键词:汽车疲劳耐久性试验; 数据采集; 应用; 耐久路谱采集; 培训; 69页。,汽车耐久性试验与路谱采集培训:数据采集与运用指南
48 -收银部经理绩效考核表1
Matlab Simulink下的四分之一车被动悬架双质量(二自由度)模型解析:探究路面不平度对车轮加速度、车身加速度及车轮动载荷的影响,matlab simulink:车辆模型:四分之一车被动悬架的双质量(二自由度)simulink模型。 输入为路面不平度,输出为车轮加速度、车身加速度、车轮动载荷。 需要matlab2016b及以上版本 ,核心关键词:Matlab Simulink; 车辆模型; 四分之一车被动悬架; 双质量二自由度; Simulink模型; 路面不平度; 车轮加速度; 车身加速度; 车轮动载荷; Matlab 2016b及以上版本。,"Matlab Simulink双质量二自由度车被动悬架模型:输出路面与动载荷影响"
基于频域模型的四机两区域风电系统一次调频与风储联合调频技术研究,【有参考文献】simulink 风储调频,风机一次调频,四机两区域系统,风电可变风速一次调频,多风速区域联合,频域模型,有转速,功率特性。 频域模型又称SFR模型,适用于科研。 有需要的来。 优点: 1,风电内部控制详细,具有功率,转速暂态特性,转矩详细信息等。 2,在不同风速下,调频能力对比。 3,加入储能后,系统频率得到显著改善。 风机内部控制详细 ,simulink风储调频;四机两区域系统;风速可变一次调频;多风速区域联合;频域模型(SFR模型);调频能力对比;储能系统改善,基于风储调频的频域模型研究:四机两区域系统的多风速一次调频策略
2022年9月全国大学生英语竞赛A类初赛参考答案
22 -绩效薪酬部经理绩效考核表1
售后服务人员绩效考核表
绩效考核结果分析系统excel模板
1、文件内容:ansible-collection-microsoft-sql-1.1.0-1.el7_9.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/ansible-collection-microsoft-sql-1.1.0-1.el7_9.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
基于ANFIS的拖拉机犁耕机组牵引控制技术研究.pdf