struts2校验:
输入校验的流程:
1。类型转换器对请求参数执行类型转换,并把转换后的值赋给action中的属性。
2。如果在执行类型转换的过程中出现异常,系统会将异常信息保存到ActionContext,conversionError拦截器将异常信息封装到fieldErrors里,然后执行第3步。如果类型转换没有出现异常,则直接进入第3步。
3。系统通过反射技术调用action中的validateXxx()方法,Xxx为方法名。
4。调用action中的validate()方法。
5。经过上面4步,如果系统中的fieldErrors存在错误信息(即存放错误信息的集合的size大于0),系统自动将请求转发至名称为input的视图。如果系统中的fieldErrors没有任何错误信息,系统将执行action中的处理方法。
基于XML配置方式实现(验证框架)流程:
1、建立Jsp页面,定义需求
* 用户名不能为null ,""
* 密码不能为null, "" 并且密码的长度6-12之间
2、定义Action(要增加一些需要验证的属性,这些属性与页面表单字段对应)
* 要继承ActionSupport或者实现Validateable接口:
3、配置struts_validate.xml文件
* 验证出错转向的页面
struts.xml配置<result name="input">/validate/login.jsp</result>
其中input转向是在action中已经定义好的.
4、配置验证的xml文件
* 验证的xml文件的规范在xwork-core-2.1.6.jar包下的:xwork-validator-1.0.3.dtd
* 验证文件的命名
* 在这个校验文件中,对action中字符串类型的username属性进行验证,
首先要求调用trim()方法去掉空格,然后判断用户名是否为空。
* 该文件需要和action类放在同一个包下,文件的取名应遵守
ActionClassName-validation.xml规则,其中ActionClassName为action
的简单类名,-validation为固定写法。
* 例如:如果Action类为cn.itcast.validate.ValidateXmlAction. 那么该文件
的取名应为:ValidateXmlAction-validation.xml
* ValidateXmlAction-validation.xml为文件的配置如下
基于XML配置方式对指定action方法实现输入校验:
当校验文件的取名为ActionClassName-validation.xml时,会对 action中的所有处理方法实施输入验证。如果你只需要对action中的某个action方法实施校验,那么,校验文件的取名应为:ActionClassName-ActionName-validation.xm
校验器案例:
required 必填校验器
<field-validator type="required">
<message>性别不能为空!</message>
</field-validator>
requiredstring 必填字符串校验器
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>用户名不能为空!</message>
</field-validator>
stringlength:字符串长度校验器
<field-validator type="stringlength">
<param name="maxLength">10</param>
<param name="minLength">2</param>
<param name="trim">true</param>
<message><![CDATA[产品名称应在2-10个字符之间]]></message>
</field-validator>
int:整数校验器
<field-validator type="int">
<param name="min">1</param>
<param name="max">150</param>
<message>年龄必须在1-150之间</message>
</field-validator>
字段OGNL表达式校验器
<field name="p_w_picpathfile">
<field-validator type="fieldexpression">
<param name="expression"><![CDATA[p_w_picpathfile.length() <= 0]]></param>
<message>文件不能为空</message>
</field-validator>
</field>
email:邮件地址校验器
<field-validator type="email">
<message>电子邮件地址无效</message>
</field-validator>
regex:正则表达式校验器
<field-validator type="regex">
<param name="expression"><![CDATA[^13\d{9}$]]></param>
<message>手机号格式不正确!</message>
</field-validator>
基于XML校验的一些特点:
当为某个action提供了ActionClassName-validation.xml和ActionClassName-ActionName-validation.xml两种规则的校验文件时,系统按下面顺序寻找校验文件:
1。AconClassName-validation.xml
2。ActionClassName-ActionName-validation.xml
系统寻找到第一个校验文件时还会继续搜索后面的校验文件,当搜索到所有校验文件时,会把校验文件里的所有校验规则汇总,然后全部应用于处理方法的校验。如果两个校验文件中指定的校验规则冲突,则只使用后面文件中的校验规则。
当action继承了另一个action,父类action的校验文件会先被搜索到。假设UserAction继承BaseAction, UserAction在struts.xml的配置如下:
<action name="user" class="cn.itcast.action.UserAction" method="{1}">
.....
</action>
访问上面名为user的action,系统先搜索到BaseAction-validation.xml, BaseAction-user-validation.xml,接着搜索到UserAction-validation.xml, UserAction-user-validation.xml。校验规则是这四个文件的总和。