Posted on 2006-03-17 11:41
Computerboy 閱讀(238)
評論(0) 編輯 收藏 所屬分類:
編程技術
簡要描述
Struts采用Validator框架(Validator框架現在是Jakarta Commons項目的一部分)來解決校驗問題,它將校驗規則代碼集中到外部的且對具體的應用程序中立的.xml文件中,這樣,就將那些到處出現的校驗邏輯從應用程序中分離出來,任何一個Struts應用都可以使用這個文件,同時還為校驗規則的擴展提供了便利。更難能可貴的是由于Validator框架將校驗中要用到的一些消息等信息與資源綁定有機結合在一起,使得校驗部分的國際化編程變得十分的便捷和自然。
主要構成
Validator框架大致有如下幾個主要組件:
- 校驗類:
是Validator框架調用的一些Java類,它處理那些基本的通用的校驗,包括required、mask(匹配正則表達式)、最小長度、最大長度、范圍、日期等。校驗類可以根據需要擴展。
- 配置文件:
主要包括兩個配置文件,一個是validator-rules.xml,主要包含一些通用的校驗規則,另一個是validation.xml,包含需要校驗的一些form及其組件的集合。
- 資源綁定:
提供國際化標簽和消息,缺省使用struts的資源綁定。即校驗所用到的一些標簽與消息都寫在ApplicationResources.properities文件中。
- Jsp 標簽:
為給定的form或者action path生成前端校驗的 JavaScript 代碼。
- ValidatorForm:
是ActionForm的一個子類。
校驗框架的使用
1) 配置
在struts-config.xml文件中,最底下添加一組插件:
<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的例子,拷貝文件 validator-rules.xml 和 validation.xml ,放到目錄 /WEB-INF 下面
2) 校驗定義
在validation.xml文件中定義校驗的表單和屬性。
例子:
????
<form
??
name=
"customerForm"
>
????????????
<field
??
property=
"name"
??
depends=
"required"
>
????????????????
<arg0
??
key=
"customerForm.name"
/>
????????????
</field>
??????????????
<field
??
property=
"address"
??
depends=
"required"
>
????????????????
<arg0
??
key=
"customerForm.address"
/>
????????????
</field>
????????
</form>
其中,表單名稱customerForm必須在struts-config.xml中定義。
property為表單的屬性。
depends為校驗規則的名稱。validator_rules.xml中缺省定義的校驗規則請參考struts的文檔。
<arg0
??
key=
"customerForm.name"
/>
指定校驗規則中使用的消息在消息資源文件中的key值
3) 表單類繼承
為了使服務器邊的驗證能夠進行,將用到的formBean從ActionForm的子類改為ValidatorForm的子類,如:
public
class BaseForm extends ValidatorForm implements Serializable
4) 客戶端校驗
要實現客戶端校驗,必須在提交的時候運行校驗框架生成的javascript代碼。
在<html:form>標簽中,添加屬性 onsubmit="return validateCustomerForm(this)"
在標簽后加上:
<
html:javascript
formName
=
"customerForm"??
cdata
=
"false"
??????
dynamicJavascript
=
"true"
staticJavascript
=
"false"
/>
<
script
type
=
"text/javascript"
??????
src
=
"
<
c:url
??
value
=
"/scripts/validator.jsp"
/>
"
></
script
>
5) Action指定校驗
在action的配置中加上指定校驗的屬性:validate="true",如:
<action??path="/customer/customer"??
????????????????type="com.demo.order.actions.CustomerAction"??
????????????????name="customerForm"??
????????????????parameter="method"??
????????????????input="add"
????????????????unknown="false"
????????????????validate="true"
????????????????>
????????????<forward??name="view"??path="model.customer.view">
????????????</forward>
????????????<forward??name="add"??path="model.customer.add">
????????????</forward>
????????????<forward??name="list"??path="model.customer.list">
????????????</forward>
????????</action>