Struts作为一个不停发展的开源项目,在页面校验这一块采用了Jakarta的Commons项目的Validate,结合Struts的MVC体系,
用起来确实不错。建议校验这部分在完成jsp后加入。
原理:Struts的页面校验分两种方法,一种是前台生成Javascript,一种是后台class。
????? 而出错信息对应的也有两种显示方法,一种是弹出消息框,一种是在原页面显示。
????? 我个人比较喜欢弹出消息框这种,因为可以将焦点置到出错的field中。
????? 所以我侧重介绍如何实现这种。
????? 请按下列步骤一步一步进行,进行的时候思考它的做法。
?????
1???? 将Struts所需lib加入到项目lib路径或服务器的lib路径
????? Struts1.1需要如下lib:struts-legacy.jar struts.jar jakarta-oro.jar commons-validator.jar
????? commons-logging.jar commons-lang.jar commons-fileupload.jar commons-digester.jar commons-collections.jar
????? commons-beanutils.jar(可以看到Struts1.1用了很多Commons项目的东东)
2???? 将下载的Struts1.1的包中的webapps/struts-validator.war 中的validation.xml和validator-rules.xml
????? 拷到项目的WEB-INF路径
????? 仔细研究一下这两个文件,可以看到validator-rules.xml是提供一些常用的validation规则。
????? 目前提供了required,requiredif,minlength,maxlength,mask,byte,short,integer,long,float,
????? double,date,range,intRange,floatRange,creditCard,email,
????? 我看了一下,只有mask不知道具体是干啥的,其他望文生义。(至于如何DIY一条自己的rule,俺还不会)
????? 重头戏来了,修改validation.xml。可以看一下validation.xml结构
validation.xml:?????
????????? "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.0//EN"
????????? "http://jakarta.apache.org/commons/dtds/validator_1_0.dtd">
??
?????
???????
phone
???????
^/(?(/d{3})/)?[-| ]?(/d{3})[-| ]?(/d{4})$
?????
?????
???????
zip
???????
^/d{5}/d*$
?????
??
??
?????
???????
zip
???????
^/d{5}(-/d{4})?$
?????
?????
????????
???????? ??? depends="required,mask,minlength">
???????? ?????
???????? ?????
????????????????????
??????????????????????
mask
??????????????????????
^/w+$
????????????????????
????????????????????
??????????????????????
minlength
??????????????????????
5
????????????????????
????????
??????? ..........
??????
????? 相信大家仔细一看就明白了,首先,可以定义一些用正则表达式表示的规则,这些规则还分全局和局部。
????? 这样就可以DIY一些可以用正则表达式表示的规则了,例如下面就具体用到了自定义的规则:phone。
????? ...
??
?????
???????
phone
???????
^/(?(/d{3})/)?[-| ]?(/d{3})[-| ]?(/d{4})$
?????
??
?? ...??
?????
???????? ??? depends="mask">
???????? ?????
????????????????????
??????????????????????
mask
??????????????????????
${phone}
????????????????????
?????
?? ...
????? 这下也明白mask的作用了,原来它是专门用于自定义规则!
????? 然后就可以添加需要加validation的field了,格式如下:
?????
?????