前天學習了struts的編程式驗證,今天學習struts內(nèi)置的配置式的驗證方式,那么,為什么要用這種方式來驗證呢?
其實,我們會發(fā)現(xiàn)struts的編碼方式驗證呢會有一些缺點,第一就是不夠靈活,第二是將驗證和驗證規(guī)則耦合在一起了,還違反了開閉原則,當我們使用了struts的validate驗證框架的時候會發(fā)現(xiàn)使用起來靈活的多,如果添加新的屬性,只需要增加配置文件的屬性驗證就行了。
Validate驗證框架
首先,我們需要做一些準備工作:
Validator框架依賴包:
1)jakarta-oro.jar:文本處理類,文本的替換,分割和過濾
2)commons-validator.jar:包含一些通用的驗證規(guī)則
需要的配置文件:
1)validator-rules.xml:包含通用驗證規(guī)則
2)validation.xml:針對具體Struts應用驗證規(guī)則
了解validator-rules.xml:
1)name:驗證規(guī)則名稱
2)classname:處理類的權限類型
3)method:實現(xiàn)驗證規(guī)則方法
3)methodParams:實現(xiàn)驗證規(guī)則方法的參數(shù)列表
4)msg:消息資源文件的key
5)depends:依賴驗證規(guī)則
使用validate驗證框架的步驟:
1.先在struts-config.xml文件里面加入插件信息
2.修改formbean的繼承為ValidatorForm
3.編寫validator.xml,它的驗證規(guī)則跟validator-rules.xml的dtd是一樣的
4.編寫國際化資源文件
5.最后在頁面上顯示錯誤信息
好了,我們現(xiàn)在按照這種步驟來做!
第一步,先在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當然也要了!這樣才會去調(diào)用驗證框架。然后呢,修改formbean對象繼承為ValidatorForm這類,示例:
- public class LoginForm extends ValidatorForm {
-
private String name;
-
private String pwd;
-
正如你看到的,這個類里面沒有validate方法,但是系統(tǒng)還是會去調(diào)用驗證框架的。
第三步,編寫varlidator.xml文件,這個文件因為是在加入插件的時候就已經(jīng)把名字給定義了,所以,這里我們還是以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是指驗證規(guī)則具體參考validator-rules.xml里面的name對應這里對非空和最小值和最大值做了驗證,多個驗證規(guī)則用,號隔開,
-
-->
-
<field property="name" depends="required,minlength,maxlength">
-
<arg0 key="login.name"/><!-- 這里是指第0個占位符(形參)的key是login.name,根據(jù)這個會去資源文件里面找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是指要填充的具體內(nèi)容,它跟varlidator.xml里面的arg幾的具體參數(shù)為準,一般都是resource="true"的時候才來這里面讀取,因為這里我是使用utf-8的格式,所以看起來有點看不懂,其實就是中文。
第五步,顯示錯誤信息,示例代碼:
顯示錯誤信息,跟前天的顯示是一樣的,具體請參看前天的博客內(nèi)容,這里稍微提下,就是html-errors里面的property的值為validator.xml里面的field的name值,也就是屬性名!
最后是struts的標簽庫,個人認為這個東西用的不多,但是還是要掌握!
struts-html主要替換原來的html標簽
struts-bean 主要是用于輸出國際化資源文件,重要的是writer和
message還有一點就是創(chuàng)建和復制define
struts-logic主要用于邏輯判斷控制流程Internet 和 equal 循環(huán)和比較
struts-tiles 主要是為了創(chuàng)建網(wǎng)頁模板感覺用處不大
好了先總結到此!
|