在Struts中提供了Validator框架以完成对于输入数据的验证功能。
Validator框架是随Struts一起提供的,所以要想启动验证框架,只需要在struts-config.xml文件中编写以下配置即可。
<plug-in className="org.apache.struts.validator.ValidatorPlugln">
<set-property property="pathnames"
value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />
</plug-in>
在此配置中,通过<plug-in>元素定义了一个Struts验证框架的支持类org.apache.struts.validator.ValidatorPlugln,之后设置了此类所需要的属性(pathnames),
此属性用于配置两个验证框架的支持文件,即validator-rules.xml和validation.xml,这两个文件都保存在WEB-INF文件夹中。
validator-rules.xml文件中定义的主要规则
NO. | 规则标记 | 错误key | 描述 |
---|---|---|---|
1 | required | errors.required | 被验证的字段不能为空 |
2 | minlength | errors.minlength | 被验证的字段的最小长度 |
3 | maxlength | errors.maxlength | 被验证的字段的最大长度 |
4 | integer | errors.integer | 被验证的字段必须是整数 |
5 | double | errors.float | 被验证的字段必须是小数 |
6 | date | errors.date | 被验证的字段必须是日期型,需要通过datePaternStrict设置日期模板 |
7 | errors.email | 被验证的字段必须是email格式 | |
8 | url | errors.url | 被验证的字段必须是url格式 |
例:定义了一个validation.xml文件,用于验证用户输入的ID、年龄、生日、email是否正确。
编写validation.xml文件---/WEB-INF/validation.xml
<!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="memberForm">
<field property="mid"
depends="maxlength,minlength,required">
<var>
<var-name>maxlength</var-name>
<var-value>15</var-value>
</var>
<var>
<var-name>minlength</var-name>
<var-value>6</var-value>
</var>
<arg key="err.mid" resource="true" />
<arg name="minlength" key="${var:minlength}"
resource="false" position="1" />
<arg name="minlength" key="${var:maxlength}"
resource="false" position="2" />
<arg name="maxlength" key="${var:minlength}"
resource="false" position="1" />
<arg name="maxlength" key="${var:maxlength}"
resource="false" position="2" />
</field>
<field property="age" depends="required,integer">
<arg key="err.age" resource="true" />
</field>
<field property="birthday" depends="required,date">
<arg key="err.birthday" resource="true" />
<var>
<var-name>datePatternStrict</var-name>
<var-value>yyyy-MM-dd</var-value>
</var>
</field>
<field property="email" depends="required,email">
<arg key="err.email" resource="true" />
</field>
</form>
</formset>
</form-validation>
本配置通过<field>节点分别为mid、age、birthday和email4个属性进行了验证规则的配置,所有的属性都必须填写,而且在mid处设置了其长度范围为6~15位,age必须是数字,date通过datePatternStrict指定了一个验证的模板,email通过email格式的验证规则进行验证。在每一个<field>节点中都配置了一个<agr>元素,用于从资源文件(ApplicationResource.properties)中取出资源信息,例如,mid的<arg>如下:
<arg key="key.mid" resource="true" />
此配置中的两个属性介绍如下:
key:表示从ApplicationResource.properties文件中读取信息,并且通过资源文件中的占位符进行内容设置。
resource:为true表示使用资源文件。
编写ApplicationResource.properties文件
#用户ID
err.mid = \u7528\u6237ID
#用户年龄
err.age = \u7528\u6237\u5e74\u9f84
#生日
err.birthday = \u751f\u65e5
#邮箱
err.email = \u90ae\u7bb1
#{0}不能为空!
errors.required = {0}\u4e0d\u80fd\u4e3a\u7a7a\uff01
#{0}必须是数字
errors.integer = {0}\u5fc5\u987b\u662f\u6570\u5b57\uff01
#{0}格式不正确!
errors.date = {0}\u683c\u5f0f\u4e0d\u6b63\u786e\uff01
#邮箱格式不正确
errors.email = \u90ae\u7bb1\u683c\u5f0f\u4e0d\u6b63\u786e\uff01
errors.minlength = \u7528\u6237ID\u7684\u8303\u56f4\u662f{0} ~ {1}\u957f\u5ea6
errors.maxlength = \u7528\u6237ID\u7684\u8303\u56f4\u662f{0} ~ {1}\u957f\u5ea6
package org.lxh.struts.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import org.apache.struts.validator.DynaValidatorForm;
public class MemberAction extends DispatchAction {
public ActionForward insert(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
DynaValidatorForm memberForm = (DynaValidatorForm) form;// TODO Auto-generated method stub
System.out.println("ID --> " + memberForm.getString("mid"));
System.out.println("AGE --> " + memberForm.get("age"));
System.out.println("BIRTHDAY --> " + memberForm.getString("birthday"));
System.out.println("EMAIL --> " + memberForm.getString("email"));
return null;
}
}
修改struts-config.xml文件,增加DynaValidatorForm的配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>
<span style="white-space:pre"> </span><form-beans>
<span style="white-space:pre"> </span><form-bean name="memberForm"
<span style="white-space:pre"> </span>type="org.apache.struts.validator.DynaValidatorForm">
<span style="white-space:pre"> </span><form-property name="mid" type="java.lang.String"></form-property>
<span style="white-space:pre"> </span><form-property name="age" type="java.lang.Integer"></form-property>
<span style="white-space:pre"> </span><form-property name="birthday" type="java.lang.String"></form-property>
<span style="white-space:pre"> </span><form-property name="email" type="java.lang.String"></form-property>
<span style="white-space:pre"> </span></form-bean>
<span style="white-space:pre"> </span></form-beans>
<span style="white-space:pre"> </span><global-exceptions />
<span style="white-space:pre"> </span><global-forwards />
<span style="white-space:pre"> </span><action-mappings>
<span style="white-space:pre"> </span><action attribute="memberForm" name="memberForm"
<span style="white-space:pre"> </span>parameter="status" path="/member" scope="request"
<span style="white-space:pre"> </span>type="org.lxh.struts.action.MemberAction" validate="true" />
<span style="white-space:pre"> </span></action-mappings>
<span style="white-space:pre"> </span><message-resources parameter="org.lxh.struts.ApplicationResources" />
<span style="white-space:pre"> </span><plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<span style="white-space:pre"> </span><set-property property="pathnames"
<span style="white-space:pre"> </span>value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />
<span style="white-space:pre"> </span></plug-in>
</struts-config>
编写JSP文件,使用验证框架----member.jsp
<%@ page language="java" pageEncoding="GBK"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles"%>
<html:html lang="true">
<head>
<html:base />
<title>hello.jsp</title>
</head>
<body>
<html:errors/>
<html:form action="member.do" method="post" οnsubmit="return validateMemberForm(this)">
ID:<html:text property="mid"/><br>
年龄:<html:text property="age"/><br>
生日:<html:text property="birthday"/><br>
邮箱:<html:text property="email"/><br>
<html:hidden property="status" value="insert"/>
<html:submit value="提交"></html:submit>
<html:reset value="重置"></html:reset>
</html:form>
<html:javascript formName="memberForm"/>
</body>
</html:html>