Posted on 2006-03-17 11:41
Computerboy 阅读(230)
评论(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>