需要对用户输入的信息在不同的页面进行校验时,常常会使用到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"); }
相关推荐
Struts1.2中的validation验证框架的实现步骤
Struts2中Validation数据验证框架教程 struts2中validation框架_前台验证 struts2中validation框架_后台验证
Struts Validation框架浅尝,Struts Validation框架浅尝Struts Validation框架浅尝
struts验证框架-validation的验证框架
struts_auto_Validation的包,已经用jar打包好了,直接用
Struts2提供了一些基于XWork Validation Framework的内建验证程序,它们大大简化了输入验证工作。 使用这些验证程序不需要编程,程序员只需要在一个XML文件里对验证程序应该如何工作做出声明就行了。需要声明的内容...
Struts2中的validation_多国语言版 国际化+struts2数据校验.zip
从...相信对正在学习Struts2的朋友有很大的帮助,最后还要说重申,所用资料均来源于互联网,所有版权归原作者所有! 上班时间偷偷做的,希望能对大家有所帮助,多多交流!
NULL 博文链接:https://lxh2002.iteye.com/blog/718662
struts2中两种validation.xml的配置方式
NULL 博文链接:https://yueguangyuan.iteye.com/blog/268000
Struts2 form Validation
Jakarta Sturts:Manually Validating Input & Jakarta Sturts:Automatically Validating Input
编制一个注册模块,使用validation框架来实现校验,至少使用4种以上的校验规则。
Struts validation 验证框架配置,简单易懂,一看就会
struts的validation验证框架源码!
比较详细的struts2 validation资料
使用FormValidation进行表单验证,使用到了jQuery和Bootstrap框架等相关技术
主要介绍了struts2 validation.xml 验证规则代码解析,具有一定借鉴价值,需要的朋友可以参考下