在使用
ActionForm 时,我们将窗体数据的一些验证工作放在validate()方法中,虽然这是一个可行的方法,然而在ActionForm中撰写特定的验证逻辑会降低
ActionForm的重用性,并产生维护上的麻烦,如果要改变验证逻辑,就必须修改原始程序并重新编译。
另一方面,验证工作可以分作客户端与伺服端的工作,客户端可以使用JavaScript作一些基本的字段验证,像是是否填写所有的字段,字段格式是否正确
等等,而为了避免客户端直接跳过页面直接请求,伺服端也必须作验证的工作,客户端与伺服端的验证工作可以互相合作。
Jakarta Commons Validator 框架可以将验证逻辑移至ActionForm之外,辅助Struts开发人员使用或自订客户端与伺服端的验证工作。Validator与Struts包装在一起,要在Struts中使用Validator框架,必须有commons-validator.jar与
jakarta-oro.jar两个类别库档案,请将它们复制到应用程序的WEB-INF/lib目录下,而Struts的其它类别库档案commons
-beanutils.jar、commons-logging.jar、commons-collections.jar、commons-
digester.jar也是必须的,请确定它们都在/WEB-INF/lib目录之下。
Validator的XML设定可以从struts-blank.war中取得,请将validation.xml与validator-
rules.xml两个设定档案复制至/WEB-INF的目录下,您也可以设一个专门用来管理设定档案的目录。
Validator是以
Plugin 界面 的方式来扩充ActionServlet的功能,所以您必须在struts-config.xml中告诉ActionServlet使用这个
plugin:
...
<plug-in
className="org.apache.struts.validator.ValidatorPlugIn">
<set-property
property="pathnames"
value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
</plug-in>
...
pathname设定了validation.xml与validator-rules.xml设定文件的位置,ActionServlet初始时,会一并
初始Validator框架,加载相关的验证器与验证规则。
Validator框架包使用Struts预设的讯息资源包,建议您复制struts-blank中的
application.properties至WEB-INF/classes/resources/中,这个讯息资源包中有一些Validator所
预设使用的key-value对应设定。
在下载的Struts档案中,webapps目录下有一个
struts-validator.war,当中包括一些Validator框架的使用范例,您可以将之复制至Servlet
Container的webapps下,启动之后会自动解压缩并完成部署,您可以先看看当中所实作的验证功能。