需要对用户输入的信息在不同的页面进行校验时,常常会使用到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"); }
相关推荐
总之,Struts2与Validation的结合使用,能够帮助开发者构建更加健壮的Web应用,通过严谨的数据验证避免无效或错误的用户输入,提升用户体验。同时,理解它们的集成原理和常见问题,是Java Web开发中的重要技能之一。
Struts2的Validation框架主要负责验证Action类中的方法参数,通过定义一个或多个validate()方法来实现。这些方法可以对用户输入的数据进行检查,如非空验证、长度限制、格式校验等。如果验证失败,框架会将错误信息...
### Struts1.2中的Validation验证框架实现步骤详解 #### 一、环境配置与准备工作 在Struts1.2框架中实现验证功能首先需要完成环境配置。这包括添加必要的库文件(JAR包)、配置XML文件等。 ##### 1.1 添加...
在"Struts1.x_auto_Validation01"这个文件中,可能包含了一个或多个示例,展示了如何配置和使用自动验证。通常,这包括以下步骤: 1. **定义ActionForm**:首先,你需要创建一个ActionForm类,并在其中声明你想要...
在使用Struts Validation框架之前,需要在`struts-config.xml`文件中配置Validator插件。例如: ```xml <plug-in className="org.apache.struts.validator.ValidatorPlugin"> ,/WEB-INF/validation.xml"/> ``` ...
Struts2提供了一些基于XWork Validation Framework的内建验证程序,它们大大简化了输入验证工作。 使用这些验证程序不需要编程,程序员只需要在一个XML文件里对验证程序应该如何工作做出声明就行了。需要声明的内容...
本文件包"Struts2_Validation"显然是关于Struts2验证机制的详细资源,可能是包括教程、示例代码或配置文件,遗憾的是,由于我们无法直接访问压缩包内容,只能基于标题和描述进行知识讲解。 Struts2的数据验证机制是...
首先,我们来探讨"Struts2中的validation_多国语言版",这是Struts2的数据校验功能。Struts2提供了一种灵活的机制来验证用户输入,通过在Action类中定义校验规则或使用XML配置文件。当用户提交表单时,框架会自动...
自动验证基于配置文件(通常是struts-config.xml或struts-validation.xml)和自定义的ValidatorForm类。在配置文件中,开发者定义了每条验证规则,如字段的必要性、长度限制、正则表达式等。自定义的ValidatorForm类...
- **Validation**:标记一个类需要被校验,通常配合Struts的配置文件使用。 ### 验证器类型详解 1. **ConversionErrorFieldValidator**:用于检测字段转换时是否出现错误,例如将字符串转换为日期时的异常情况。 2...
本篇文章将详细探讨Struts2如何使用Validation框架进行数据验证。 一、Struts2 Validation框架概述 Struts2的Validation框架是用于处理用户输入验证的一种机制。它允许开发者定义验证规则,这些规则会在用户提交...
使用Struts的Validation框架,我们可以轻松地实现这些校验规则。以下是对四种常见校验规则的详细解释: 1. **非空验证**:这是最基本的校验规则,确保用户没有遗漏必填字段。在ActionForm类中,可以使用`@Required...
通过以上介绍,我们可以看到,在Struts2框架中使用`validation.xml`进行验证配置非常灵活。无论是针对特定Action还是整个应用,都可以轻松地定义和管理验证规则。这种机制不仅简化了代码结构,也提高了程序的可维护...
### Struts2拦截器的使用方法 #### 一、Struts2拦截器概述 Struts2框架中的拦截器(Interceptor)是一种重要的机制,用于在Action执行前后进行一系列处理,比如参数验证、数据预处理等。它能够帮助开发者更加灵活...
NULL 博文链接:https://yueguangyuan.iteye.com/blog/268000
2. **Validator插件**:Struts2的Validator插件提供了验证框架,它可以读取XML配置文件(struts-validation.xml或struts-plugin.xml)或使用注解定义验证规则。 3. **Validation拦截器**:这是Struts2的核心组件之...
这个框架在Struts 1.x版本中被广泛使用,它通过定义一系列的规则来确保用户提交的数据满足应用程序的需求,从而提高数据的准确性和系统的安全性。在深入探讨其源码之前,我们首先需要理解验证框架的基本工作原理。 ...
Struts2 Validation是Apache Struts框架的一个重要组成部分,主要用于处理Web应用中的数据验证。这个框架提供了灵活且...对于使用Struts2框架的开发者来说,理解和熟练掌握Struts2 Validation是提升开发效率的关键。