一、struts2系统验证
1.基于struts2系统验证的方式实际上就是通过配置xml文件的方式达到验证的目的。
2.实际上系统校验的方法和手工校验的方法在底层的基本实现是相同的。但是使用系统校验的时候对实现过程进行了封装,用起来比较方便。
3.实现过程
(1)在Action文件中定义好相关属性,属性名字和表单中的name属性值要相同。
(2)在Action同目录下新建一个XML文件,文件命名规则如下
* 如果是针对整个Action文件的,则文件名为:ActionClassName-validation.xml
* 如果是针对Action中的某个方法,则文件名为:ActionClassName-ActionName-validation.xml(ActionName为struts.xml文件中)
(3)书写配置文件
(4)不需要在struts.xml文件中进行相关的注册。
4.配置文件的书写
(1)首先,dtd文件规范是:xwork-core-2.3.24.jar包下xwork-validator-x.x.x.dtd文件,将该文件引入配置文件中,如果没有相关提示,则提示方法参考:
http://kuangdaoyizhimei.blog.163.com/blog/static/22055721120158582251764/
(2)按照提示一步一步写就可以了,但是注意有一个field-validator标签,该标签有一个type属性,该属性的值应当参考
com.opensymphony.xwork2.validator.validators.default.xml文件中的相关定义
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE validators PUBLIC 3 "-//Apache Struts//XWork Validator Definition 1.0//EN" 4 "http://struts.apache.org/dtds/xwork-validator-definition-1.0.dtd"> 5 6 <!-- START SNIPPET: validators-default --> 7 <validators> 8 <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/> 9 <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/> 10 <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/> 11 <validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/> 12 <validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/> 13 <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/> 14 <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/> 15 <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/> 16 <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/> 17 <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/> 18 <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/> 19 <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/> 20 <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/> 21 <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/> 22 <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/> 23 <validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/> 24 </validators> 25 <!-- END SNIPPET: validators-default -->
default.xml
(3)field-validator下的param标签中的参数参考com.opensymphony.xwork2.validator.validators.default.xml文件中的类源文件,查看源代码即可得到需要传递的参数的相关信息,如参数名,参数类型等。
5.将手动验证的案例使用系统验证重新写一遍,只列出配置文件:
* 文件名:ValidateAction-validateAction-validation.xml
*文件内容:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> <validators> <field name="username"> <field-validator type="requiredstring"> <param name="trim">true</param> <message><![CDATA[用户名不能为空!]]></message> </field-validator> </field> <field name="password"> <field-validator type="requiredstring"> <message><![CDATA[密码不能为空]]></message> </field-validator> <field-validator type="regex"> <param name="trim">true</param> <param name="regex"><![CDATA[^[0-9a-zA-Z]{6,10}$]]></param> <message><![CDATA[密码为6-10位的字母和数字的组合!]]></message> </field-validator> </field> </validators>
6.两种配置文件的搜索顺序:ActionClassName-validation.xml,ActionClassName-ActionName-validation.xml,系统找到第一个校验文件的时候会继续搜索下一个校验文件,当找到所有校验文件的时候,会把校验文件里面的所有校验规则汇总,然后全部应用于处理方法的校验。如果两个校验文件中指定的校验规则冲突,则只是用后面文件中的校验规则。