jpetbook 系列:Validator学习笔记

1.工程所使用的jar包: commons-validator.jar, spring-modules-0.9-all.jar,

2.在jbookstoretest-servlet.xml的开头配置如下
<import resource="/conf/validatorContext.xml"/>
3.新建/conf/validatorContext.xml文件,写如下内容:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="validatorFactory" class="org.springmodules.commons.validator.DefaultValidatorFactory"> -----①
<property name="validationConfigLocations"> -----②
<list>
<value>/WEB-INF/validator-rules.xmlvalue>
<value>/WEB-INF/validation.xmlvalue>
list>
property>
bean>
<bean id="beanValidator"
class="org.springmodules.commons.validator.DefaultBeanValidator"> -------③
<property name="validatorFactory">
<ref bean="validatorFactory" /> --------④
property>
bean>

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="ApplicationResources"/>
</bean>
</beans><!-- 加载资源文件 -->

① 声明validatoFactory 这里我们使用spring 的DefaultValidatorFactory
② 定义其validationConfigLocations属性,将validator-rules.xml和validation.xml传入
③ 声明beanValidator 这里我们使用spring的DefaultBeanValidator
④ 在其属性中指明要使用的validatorFactory 。这里我们使用刚刚定义的validatorFactory

spring的validate验证需要两个bean(ValidatorFactory、BeanValidator)
ValidatorFactory用于制造BeanValidator,后者则是在程序中执行校验的控制bean。

3. Validator框架采用了两个基于XML的配置文件来配置验证规则,这两个文件是validator-rules.xml和validation.xml
Validator-rules.xml文件包含了一组通用的验证规则,对所有的String都适用.一般的情况下没必要修改,除非需要修改或者扩展默认的规则.建议如果想扩展默认的验证规则,最好把自定义的客户化规则放在validation.xml文件中,这样当升级Validator框架版本的时候,也无需修改validator-rules.xml文件.
<validator>元素的name属性指定验证规则的逻辑名,这个名字必须唯一.
还有classname和method属性分别指实现验证规则逻辑的类和方法.
msg属性指定来自Resource中的消息key,验证失败,根据这个消息Key去找匹配的消息文本. depends属性指定在调用当前验证规则之前必须调用其他验证规则.

验证器规则必须封装在标签 <form-validation> 中。验证器包含验证逻辑。
在以下示例中,验证器为 required ,它包含客户端和服务器端验证的验证代码。
用<validator>部分显示的代码定义了服务器端验证器类和方法,
用<javascript>显示的代码定义了客户端验证的JavaScript 代码。
该文件中的其余验证器采用了相同的结构。
<form-validation>

<global>
<validator name="required"
classname="com.avidmouse.validator.commons.FieldChecks"
method="validateRequired"
methodParams="java.lang.Object,
org.apache.commons.validator.Field"
msg="errors.required">

<javascript><![CDATA[
function validateRequired(form) {
var isValid = true;
var focusField = null;
var i = 0;
var fields = new Array();
oRequired = new required();
for (x in oRequired) {
var field = form[oRequired[x][0]];

if (field.type == 'text' ||
field.type == 'textarea' ||
field.type == 'file' ||
field.type == 'select-one' ||
field.type == 'radio' ||
field.type == 'password') {

var value = '';
// get field's value
if (field.type == "select-one") {
var si = field.selectedIndex;
if (si >= 0) {
value = field.options[si].value;
}
} else {
value = field.value;
}

if (trim(value).length == 0) {

if (i == 0) {
focusField = field;
}
fields[i++] = oRequired[x][1];
isValid = false;
}
}
}
if (fields.length > 0) {
focusField.focus();
alert(fields.join('\n'));
}
return isValid;
}

// Trim whitespace from left and right sides of s.
function trim(s) {
return s.replace( /^\s*/, "" ).replace( /\s*$/, "" );
}

]]>
</javascript>

</validator>
</global>
</form-validation>
4. validation.xml
为了在一个字段中使用验证器,需要在一个 XML 文件中指定验证器和字段之间的映射关系,因此建立validation.xml,在validation.xml文件中,定义你要校验的formbean(或者说是command) ,定义这个bean中有哪几个field需要验证,使用何种规则验证。(注意:这里定义的form name 必须和前面controller中定义的commandName保持一致),示例如下:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE form-validation PUBLIC
"-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.0//EN"
"http://jakarta.apache.org/commons/dtds/validator_1_0.dtd">
<form-validation>
<formset>
<form name="userSimpleInfo">-----------------------a
<field property="username" depends="required">--------b
<arg0 key="userSimpleInfo.username"/>-------------c
</field>
<field property="password" depends="required,mask">------d
<arg0 key="userSimpleInfo.password"/>
<var>
<var-name>mask</var-name>
<var-value>^[0-9a-zA-Z]*$</var-value>
</var>
</field>
</form>
</formset>
</form-validation>
a 这里是定义要验证的bean的名字,要求和Controller定义的commandName相同
b 这里定义要验证的bean属性为username,使用规则为required(不为空)
c 这里定义的是显示信息,arg0表示位置 0 的显示信息,显示key 所标明的信息(如果你还有多个信息就用 arg1,arg2 等)出错信息将会显示为: 用户代码不能为空
d mask 标记验证,使用正则表达式来约束表单输入值。(如:只能输入数字,字母或指定的字符)
此外:
e msg标签用来定义验证规则和出错信息的关联,这里表示当出现 mask 校验失败时,显示 errors.negative指明的信息。
f 整个<var>标签就是用来定义具体的规则的,如<var-name>mask指明是用于mask的规则,<var-value>^[0-9a-zA-Z]*$表示只允许0-9和大小写字母。

5.在jbookstore-servlet中编写controller信息。
<bean id="loginController" class="cn.edu.ccut.jbookstore.login.webtier.LoginController">
<property name="loginDao">
<ref bean="loginDao"/>
</property>
<property name="validator">
<ref bean="beanValidator"/>
</property>
<property name="commandName" value="userSimpleInfo"/>------domain类名,注意一定要小写,并且和validation.xml中form的名字一样
<property name="commandClass" value="cn.edu.ccut.jbookstore.domain.UserSimpleInfo"/>
<property name="formView">----------刚开始进去时要执行的vm文件
<value>vm/defaultview</value>
</property>
<property name="successView">-----在controller中判断如果执行submit后,要去的JSP
<value>error_message</value>
</property>
</bean>
6. 将错误消息保存在哪儿?
将错误消息保存在WEB-INF文件夹下 的ApplicationResources.properties 中,具体情况参见下面的参考文献。
参考文献:
协同使用 WebSphere Studio V5 与 Struts Framework: 第二部分:使用 Struts 验证器
http://www.ibm.com/developerworks/cn/websphere/library/techarticles/0311_fung_yu/fung_yu2.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值