用commons Validator添加验证
为了在Struts中使用验证,执行以下几步:
1.
在struts-config.xml中添加ValidatorPlugin。
2.
创建validation.xml,指定lastName为必填字段。
3.
把DynaActionForm改用DynaValidatorForm。
4.
仅为save()方法设置验证(validation)。
5.
在message.properties中添加validation errors。
在
struts-config.xml
中添加
ValidatorPlugin
配置
Validatorp plugins,
添加以下片断到
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>
从这里你可以看出,
Va l i d a t o r
会查找
W E B - I N F
下的两个文件
v a l i d a t o r- r u l s . x m l
和
validation.xml
。第一个文件,
validator-rules.xml,
是一个标准文件,作为
Struts
的一部分发
布,它定义了所有可用的验证器
(validators)
,功能和客户端的
javascript
类似。第二个文件,
包含针对每个
form
的验证规则。
创建
validation.xml
,指定
lastName
为必填字段
validation.xml
文件中包含很多
DTD
定义的标准元素。但你只需要如下所示的
<form>
和
<field>,
更多信息请参阅
Validator
的文档。在
web/WEB-INF/validation.xml
中的
form-validation
标签
之间添加
form-set
元素。
<formset>
<form name="userForm">
<field property="user.lastName" depends="required">
XML to PDF by RenderX XEP XSL-FO Formatter, visit us at http://www.renderx.com/
<arg0 key="user.lastName"/>
</field>
</form>
</formset>
把
DynaActionForm
改为
DynaValidatorForm
把
struts-config.xml
中的
DynaActionForm
改为
DynaValidatorForm
。
<form-bean name="userForm"
type="org.apache.struts.validator.DynaValidatorForm">
...
为
save()
方法设置验证
(validation)
使用
Struts DispatchAction
弊端是,验证会在映射层
(mapping level)
激活。为了在
list
和
edit
页面关闭验证。你必须单独建一个
"validate=false"
的映射。例如,
AppFuse
的
UserAction
有
两个映射:
"/editUser"
和
"/listUser"
。然而有一个更简单的方法,可以减少
xml
,只是多了一些
java
代码。
1.
在
"/user"
映射中,添加
validate="false"
。
2.
修改
UserAction
中的
save()
方法,调用
form.validate()
方法,如果发现错误,返回编辑页
面。
if (log.isDebugEnabled()) {
log.debug("entering 'save' method...");
}
// run validation rules on this form
ActionMessages errors = form.validate(mapping, request);
if (!errors.isEmpty()) {
saveErrors(request, errors);
return mapping.findForward("edit");
}
DynaActionForm userForm = (DynaActionForm) form;
当
dispatchAction
运行时,与附带一个属性的两个映射相比,这样更加简洁。但用两个映射
也有一些优点:
•
验证失败时,可以指定转向
"input"
属性。
•
在映射中可以添加
"role"
属性,可以指定谁有访问权限。例如,任何人都可以看到编辑
(edit)
页面,但只有管理员可以保存
(save)
。
3.
运行
ant deploy
重新载入
(reload)
,尝试添加一个新用户,不要填写
lastName
。你会看到
一个验证错误,表明
lastName
是必填字段,如下所示:
XML to PDF by RenderX XEP XSL-FO Formatter, visit us at http://www.renderx.com/
图
2.10.
运行
ant deploy
命令的结果
Struts Validator
的另一种比较好的特性是客户端验证
(client-side validation)
。
4.
在
f o rm
标签
( w e b / u s e r Fo r m . j s p )
中添加
" o n s u b m i t "
属性,在
f o rm
末尾添加
>html:javascript>
。
<html:form action="/user" focus="user.firstName"
οnsubmit="return validateUserForm(this)">
...
</html:form>
<html:javascript formName="userForm"/>
现在如果运行
ant deploy,
试图保存一个
lastname
为空的用户,会弹出一个
JavaScript
提
示:
"Last Name is required"
。这里有一个问题,这个带
JavaScript
的
form
把
validator
的
JavaScript
功能都载入了页面。再好的方法是,从外部文件导入
Javascript
。参见第
5
章。
恭喜你!你已经开发一个
web
应用程序,它包含数据库交互,验证实现,成功信息和错误信息的
显示。第
4
章,将会把这个转向使用
Spring
框架。第
5
章中,会添加异常处理,文件上传,邮件发
送等特性。第
6
章会看一下
JSP
的替代技术,在第
7
章,会探讨
DAO
的不同实现,包括
iBATIS,JDO
和
Spring
的
JDBC
。