前天学习了struts的编程式验证,今天学习struts内置的配置式的验证方式,那么,为什么要用这种方式来验证呢?
其实,我们会发现struts的编码方式验证呢会有一些缺点,第一就是不够灵活,第二是将验证和验证规则耦合在一起了,还违反了开闭原则,当我们使用了struts的validate验证框架的时候会发现使用起来灵活的多,如果添加新的属性,只需要增加配置文件的属性验证就行了。
Validate验证框架
首先,我们需要做一些准备工作:
Validator框架依赖包:
1)jakarta-oro.jar:文本处理类,文本的替换,分割和过滤
2)commons-validator.jar:包含一些通用的验证规则
需要的配置文件:
1)validator-rules.xml:包含通用验证规则
2)validation.xml:针对具体Struts应用验证规则
了解validator-rules.xml:
1)name:验证规则名称
2)classname:处理类的权限类型
3)method:实现验证规则方法
3)methodParams:实现验证规则方法的参数列表
4)msg:消息资源文件的key
5)depends:依赖验证规则
使用validate验证框架的步骤:
1.先在struts-config.xml文件里面加入插件信息
2.修改formbean的继承为ValidatorForm
3.编写validator.xml,它的验证规则跟validator-rules.xml的dtd是一样的
4.编写国际化资源文件
5.最后在页面上显示错误信息
好了,我们现在按照这种步骤来做!
第一步,先在struts-config.xml里面加入插件信息,示例代码:
- <struts-config>
- <data-sources />
- <form-beans>
- <form-bean name="login" type="com.lovo.form.LoginForm"></form-bean>
- </form-beans>
- <global-exceptions />
- <global-forwards />
- <action-mappings>
- <action path="/login" type="com.lovo.action.LoginAction" name="login" validate="true" input="/login.jsp">
- <forward name="success" path="/index.jsp"></forward>
- <forward name="error" path="/login.jsp"></forward>
- </action>
- </action-mappings>
- <message-resources parameter="com.lovo.struts.ApplicationResources" />
- <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>
第二步,这里必须将插件信息加在mappings后面,还有action的validate属性必须配置哦!input当然也要了!这样才会去调用验证框架。然后呢,修改formbean对象继承为ValidatorForm这类,示例:
- public class LoginForm extends ValidatorForm {
-
private String name;
-
private String pwd;
-
正如你看到的,这个类里面没有validate方法,但是系统还是会去调用验证框架的。
第三步,编写varlidator.xml文件,这个文件因为是在加入插件的时候就已经把名字给定义了,所以,这里我们还是以validator.xml这个文件为例,它呢,保存在WEB-INF下面的,因为它的dtd跟varlidator-rules.xml这个dtd是一样的,所以就直接拷贝了。看示例吧!
-
<!DOCTYPE form-validation PUBLIC
-
"-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN"
-
"http://jakarta./commons/dtds/validator_1_1_3.dtd">
-
- <form-validation>
-
<formset>
-
<form name="login"><!-- 要验证的formbean的name,这里跟struts-config.xml里面的formbean的name一致 -->
-
<!-- property是指要验证的具体属性名,这里跟formbean里面的属性名一致
-
depends是指验证规则具体参考validator-rules.xml里面的name对应这里对非空和最小值和最大值做了验证,多个验证规则用,号隔开,
-
-->
-
<field property="name" depends="required,minlength,maxlength">
-
<arg0 key="login.name"/><!-- 这里是指第0个占位符(形参)的key是login.name,根据这个会去资源文件里面找login.name所对应的value值,然后将其填充到占位符中 -->
-
<arg1 key="${var:minlength}" resource="false"/><!-- 这里key是指第2个形参的的值对应下面var的name值,首先resource=false是指将不会去资源文件里面找形参了,而会在当前文件里面找,这里我们会配置一个var的属性来确定第二个形参的值 -->
-
<arg2 key="${var:maxlength}" resource="false"/>
-
<var>
-
<var-name>minlength</var-name><!-- 这里的var-name是指validator-rules.xml的name -->
-
<var-value>2</var-value><!-- 形参的值 -->
-
</var>
-
<var>
-
<var-name>maxlength</var-name>
-
<var-value>10</var-value>
-
</var>
-
</field>
-
</form>
-
</formset>
-
</form-validation>
具体的地方都加了注释,这里不再详说。
第四步,编写国际化资源文件,刚刚在varlidator.xml里面多次提到了国际化文件,那么这个文件到底有什么作用呢?大家可以跟我来看看哈!Come
ON!
errors.required={0}\u4E0D\u80FD\u4E3A\u7A7A\uFF01
errors.minlength={0}\u6700\u5C0F\u4E3A\u6570{1}
errors.maxlength={0}\u6700\u5927\u4F4D\u6570{2}
login.name=\u7528\u6237\u540D
login.pwd=\u5BC6\u7801
这里呢,errors.required这个key值其实是varlidator-rules.xml里面的msg对应,后面的value值是指要显示的错误信息,{0}是指validator.xml里面的arg第几个如果是arg0,就是{0},这样来填充占位符,其实,这里我们也可以把这里的{0}想成我们在学JDBC的时候,里面的preparedstatments里面的填充?号的值,其实是一个道理。
最后的login.name是指要填充的具体内容,它跟varlidator.xml里面的arg几的具体参数为准,一般都是resource="true"的时候才来这里面读取,因为这里我是使用utf-8的格式,所以看起来有点看不懂,其实就是中文。
第五步,显示错误信息,示例代码:
显示错误信息,跟前天的显示是一样的,具体请参看前天的博客内容,这里稍微提下,就是html-errors里面的property的值为validator.xml里面的field的name值,也就是属性名!
最后是struts的标签库,个人认为这个东西用的不多,但是还是要掌握!
struts-html主要替换原来的html标签
struts-bean 主要是用于输出国际化资源文件,重要的是writer和
message还有一点就是创建和复制define
struts-logic主要用于逻辑判断控制流程Internet 和 equal 循环和比较
struts-tiles 主要是为了创建网页模板感觉用处不大
好了先总结到此!
|