在Struts中,Validator的作用非常大,他可以让用户从繁琐的页面验证工作中脱身,让页面验证工作放到配置文件里去做,Struts已经内置了如下这些我们经常使用的校验器:
· validateByte 检查值能够安全地转换为byte
· validateCreditCard 检查值是一个有效的信用卡号码
· validateDate 检查值是一个有效的日期
· validateDouble检查值能够安全地转换为double
· validateEmail 检查值是一个有效的Email地址
· validateFloat 检查值能够安全地转换为double
· validateInteger 检查值能够安全地转换为int
· validateLong检查值能够安全地转换为long
· validateMask检查值符合掩码规则,掩码采用规则表达式的方式
· validateMinLength 检查值的长度大于等于指定长度
· validateMaxLength检查值的长度小于指定长度
· validateRange检查值的有效范围在指定范围内
· validateRequired检查值不为null或长度>0
· validateShort 检查值能够安全地转换为short
这些校验器差不多已经囊括了大多数的需要验证的东西,今天我们大致回顾一下Validator如何在Struts中应用,有时间,我会展示一下实际项目中又是如何做的。
第一步:启用Validator插件
Validator插件已经内置于Struts中,但是默认状态下是没有被启用的,我们首先是要修改struts-config.xml文件,在文件最后(记住,是最后哟~!),增加如下代码来启用之:
<set-property property="pathnames"
value="/org/apache/struts/validator/validator-rules.xml,/WEB-INF/validation.xml" />
</plug-in>
第二步:生成ActionForm Bean
java.lang.Object
org.apache.struts.action.ActionForm
org.apache.struts.validator.ValidatorForm
org.apache.struts.validator.ValidatorActionForm
java.lang.Object
org.apache.struts.action.ActionForm
org.apache.struts.action.DynaActionForm
org.apache.struts.validator.DynaValidatorForm
org.apache.struts.validator.DynaValidatorActionForm
由以上的继承关系,我们可以清楚地看到ValidatorActionForm/DynaValidatorActionForm都是继承于ActionForm,我们在实现自己的ActionForm Bean的时候,继承ValidatorActionForm/DynaValidatorActionForm即可。里面的内容与我们平时的ActionForm Bean无异。
第三步:配置Validator
现在,准备工作已经结束,我们可以根据第一步的配置,在WEB-INF下新建validation.xml文件,
<form name="/customer/cust001">
<field property="userSel" depends="required">
<arg0 key="番号選択" resource="false"/>
</field>
<field property="recptNumInput" depends="needvalidate,intRange">
<arg0 key="受付番号" resource="false"/>
<arg key="prompt.min" position="1"/>
</field>
<field property="max" depends="intRange,maxlength">
<arg key="prompt.max" position="0"/>
<arg name="maxlength" key="${var:maxlength}" resource="false" position="1" />
<var>
<var-name>maxlength</var-name>
<var-value>10</var-value>
</var>
</field>
</form>
</formset>
现在大致介绍一下各个元素的意思。
<form>不用说,就是定义是要验证哪个form的。
<field>是用来判断要验证哪个字段,depends属性,意思是该字段要依赖于哪个验证器。
<arg> 它的作用是替换信息中的某一部分,或者为验证方法提供必需的参数值。
可以两种方式传入参数,第一,<arg0>,<arg1>...(最多四个) 第二,用<arg>里的position属性来设置传入的位置。
key属性指定了一个资源文件的关键字,用来替换掉msg中需要替换的部分。如果你想设置一个明确的文本而不是资源文件的关键字,则可以将resource属性设置为false,这种情况下,可以将key属性设置为一个明确的文本,如“身份证”。
name属性指定了msg将使用的校验规则名称,属性值必须是在validation-rules.xml 文件中定义的校验规则。
注:对于一个field,需要的验证规则有时不止一个,例如depends="required,date",而多个验证规则中的每一个都需要出错时传入一些参数信息,如果它们所需要的参数个数、名称和顺序都相同,那么只要定义<arg0...、<arg1...等等即可。但是如果它们需要的参数的个数、名称和顺序不同怎么办,如果我们对于第一个输入参数只定义一个arg0,那么这个arg0用于哪个验证消息,因此这时必须通过arg标签的name属性来表示该参数所服务的验证。
field 元素包含的最后一个子元素是var 元素,field 元素可以包含0到多个var元素,var 元素可以设置该field所用到的校验规则的参数,var-name 参数名,var-value指定参数值。
<msg> 与 <arg> 相似,三个属性分别如下:
<msg name="date,daterange" key="80000" resource="true"/>
<arg0 key="開始日時" resource="false"/>
<var>
<var-name>date_mode</var-name>
<var-value>YYYYY</var-value>
</var>
</field>
name属性与<arg> 的同名属性相同。
key属性指定了一个资源文件的关键字,当校验失败是,该关键字所代表的信息将会添加到ActionError 中。
resource属性与<arg> 的同名属性相同。
这样,所有的概念都已经讲清楚了。下面看看实际项目是如何做的。
第一,可以为不同的业务逻辑配置多个validator文件。
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames"
value="/WEB-INF/struts-config/validator-rules.xml,
/WEB-INF/struts-config/validation-login.xml,
/WEB-INF/struts-config/bankuser/validation-tekou.xml,
/WEB-INF/struts-config/bankuser/validation-kirin.xml,
/WEB-INF/struts-config/enduser/validation-qbs.xml"/>
</plug-in>
<!-- ================= 業務名: ValidatorPlugIn・終了============================== -->
第二,在每一个validation文件中可以自定义规则。
classname="com.ws.kokey.util.validator.UnitValidator"
method="validateCharacterFull"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
msg="全角のチェック">
</validator>
具体实现,我们可以在定义的那个class里面写好。
好了,今天不能再写了,从上午都已经写到下午14:30了。下次再写。
本文详细介绍了Struts框架中Validator插件的使用方法,包括如何启用插件、创建ActionFormBean以及配置Validator等内容。并提供了实际项目的配置示例。

2801

被折叠的 条评论
为什么被折叠?



