[標(biāo)題]:[原]Struts2校驗(yàn)框架
[時(shí)間]:2009-7-27
[摘要]:校驗(yàn)框架配置、客戶端校驗(yàn)
[關(guān)鍵字]:浪曦視頻,Struts2應(yīng)用開發(fā)系列,WebWork,Apache,validation
[環(huán)境]:struts-2.1.6、JDK6、MyEclipse7、Tomcat6
[作者]:Winty (wintys@gmail.com) http://www.tkk7.com/wintys
[正文]:
Struts校驗(yàn)框架提供了一種不用編寫代碼,只需修改配置文件即可對輸入進(jìn)行校驗(yàn)的功能。代碼方式校驗(yàn),即重寫validate()方法。實(shí)際應(yīng)用中,
validate()與校驗(yàn)框架一般只選其一。
1、校驗(yàn)框架配置
在RegisterAction.java相同目錄新建校驗(yàn)框架配置文件RegisterAction-validation.xml。RegisterAction-validation.xml的DTD可以復(fù)制struts自帶的示例struts2-mailreader-2.1.6中的DTD:
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
xwork-validator-1.0.2.dtd:
<?xml version="1.0" encoding="UTF-8"?>
<!--
XWork Validators DTD.
Used the following DOCTYPE.
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-->
<!ELEMENT validators (field|validator)+>
<!ELEMENT field (field-validator+)>
<!ATTLIST field
name CDATA #REQUIRED
>
<!ELEMENT field-validator (param*, message)>
<!ATTLIST field-validator
type CDATA #REQUIRED
short-circuit (true|false) "false"
>
<!ELEMENT validator (param*, message)>
<!ATTLIST validator
type CDATA #REQUIRED
short-circuit (true|false) "false"
>
<!ELEMENT param (#PCDATA)>
<!ATTLIST param
name CDATA #REQUIRED
>
<!ELEMENT message (#PCDATA)>
<!ATTLIST message
key CDATA #IMPLIED
>
RegisterAction-validation.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<!--
與field等價(jià)的validator
<validator type="requiredstring">
<param name="fieldName">name</param>
<param name="trim">true</param>
<message>name required</message>
</validator>
<validator type="stringlength">
<param name="fieldName">name</param>
<param name="trim">true</param>
<param name="minLength">6</param>
<param name="maxLength">10</param>
<message>name length range : ${minLength} ~ ${maxLength}</message>
</validator>
-->
<field name="name">
<field-validator type="requiredstring" >
<param name="trim">true</param>
<message>name required</message>
</field-validator>
<field-validator type="stringlength">
<param name="trim">true</param>
<param name="minLength">6</param>
<param name="maxLength">10</param>
<message>name length range : ${minLength} ~ ${maxLength}</message>
</field-validator>
</field>
<field name="age">
<field-validator type="conversion" short-circuit="true">
<message>the field age conversion error</message>
</field-validator>
<field-validator type="int">
<param name="min">1</param>
<param name="max">150</param>
<message>age range: ${min} ~ ${max}</message>
</field-validator>
</field>
<field name="birthday">
<field-validator type="required">
<message>birthday required</message>
</field-validator>
<field-validator type="date">
<param name="min">2009-01-01</param>
<param name="max">2009-12-31</param>
<message>birthday range: ${min} ~ ${max}</message>
</field-validator>
</field>
<field name="email">
<field-validator type="email">
<message>invalid email address</message>
</field-validator>
</field>
</validators>
說明:
a.校驗(yàn)框架有兩種校驗(yàn)方式:field和validator。
field校驗(yàn):先指定需要校驗(yàn)的屬性,再指定校驗(yàn)方式。validator校驗(yàn):先指定校驗(yàn)方式,再指定需要校驗(yàn)的屬性。兩種方式是等價(jià)的。
field校驗(yàn):
<field name="name">
<field-validator type="requiredstring" >
<param name="trim">true</param>
<message>name required</message>
</field-validator>
<field-validator type="stringlength">
<param name="trim">true</param>
<param name="minLength">6</param>
<param name="maxLength">10</param>
<message>name length range : ${minLength} ~ ${maxLength}</message>
</field-validator>
</field>
validator校驗(yàn):
<validator type="requiredstring">
<param name=
"fieldName">name</param>
<param name="trim">true</param>
<message>name required</message>
</validator>
<validator type="stringlength">
<param name=
"fieldName">name</param>
<param name="trim">true</param>
<param name="minLength">6</param>
<param name="maxLength">10</param>
<message>name length range : ${minLength} ~ ${maxLength}</message>
</validator>
b.<field-validator type="requiredstring" >中的type及其對應(yīng)的xwork類可以在xwork-2.1.2.jar/com.opensymphony.xwork2.validator.validators/
default.xml中查找到。
default.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator Config 1.0//EN"
"http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd">
<!-- START SNIPPET: validators-default -->
<validators>
<validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
<validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
<validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
<validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>
<validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>
<validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
<validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
<validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
<validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
<validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
<validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
<validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
<validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
<validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
<validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
<validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>
</validators>
<!-- END SNIPPET: validators-default -->
c. 對于校驗(yàn)<field-validator type="requiredstring" >:String用requiredstring,其它類型用required。
d. 驗(yàn)證錯(cuò)誤將默認(rèn)產(chǎn)生FieldError。
e.
short-circuit="true" : 一個(gè)校驗(yàn)失敗,是否是繼續(xù)執(zhí)行后續(xù)校驗(yàn)。
f. 對于相同屬性的FieldError,validate()方法中的驗(yàn)證和RegisterAction-validation.xml中的驗(yàn)證都會(huì)執(zhí)行,并且FieldError都會(huì)顯示。
執(zhí)行順序: RegisterAction-validation.xml => validate()。
2、特定于業(yè)務(wù)邏輯的局部校驗(yàn):
對于struts.xml中<action>的method="register"指定的業(yè)務(wù)方法register(),使用校驗(yàn)RegisterAction-register-validation.xml(與RegisterAction.java在同一目錄下)。同時(shí),RegisterAction-validation.xml會(huì)被執(zhí)行。執(zhí)行順序: RegisterAction-validation.xml => RegisterAction-register-validation.xml
3、Struts2客戶端校驗(yàn)
設(shè)置struts標(biāo)簽<s:form>中validate="true"。這樣就會(huì)根據(jù)RegisterAction-validation.xml生成頁面Javascript,在客戶端執(zhí)行校驗(yàn)。
注意:
a.
struts標(biāo)簽不能使用simple主題。
b.Struts2客戶端校驗(yàn)功能較弱,一般不用。
4、FieldError和ActionError的實(shí)現(xiàn)
a.真正存放field級(jí)別錯(cuò)誤信息的對象是LinkedHashMap。
b.該LinkedHashMap的key是String類型的,
value是ArrayList類型,所以同一個(gè)key可以對應(yīng)多個(gè)錯(cuò)誤消息。
c.對于Action級(jí)別的錯(cuò)誤信息,實(shí)際上是放置在ArrayList中的。
[參考資料]:
《浪曦視頻之Struts2應(yīng)用開發(fā)系列》
[附件]:
源代碼 :
http://www.tkk7.com/Files/wintys/struts_ValidationFramework.zip
posted on 2009-07-27 23:54
天堂露珠 閱讀(629)
評(píng)論(0) 編輯 收藏 所屬分類:
Struts