1. 输入校验
流程:用户提交表单 -> 进行类型转换(有错,转到input视图)
-> 输入校验validateXxxx()(有错,转到input视图)
-> validate()(有错,转到input视图)
如果fliedErrors里存有信息,则Action转到input视图. 在转向的input视图中,可以用 <s:fielderror/> 拿到错误信息,但是默认带了<ul><li> XXXX </ul></li>,于是常用<s:properties>直接拿出值,再自己做修饰
1)手工在Action里写validate()或validateXxxx()方式
在执行execute()方法前,首先执行输入校验
* validate()对所有方法进行校验
* validateXxxxx() 对 xxxxx()这个方法进行校验
如:
public void validate() {//会对action中的所有方法校验
if(this.username==null || "".equals(this.username.trim())){
this.addFieldError("username", "用户名不能为空");
}
if(this.mobile==null || "".equals(this.mobile.trim())){
this.addFieldError("mobile", "手机号不能为空");
}else{
if(!Pattern.compile("^1[358]\\d{9}$").matcher(this.mobile).matches()){
this.addFieldError("mobile", "手机号格式不正确");
}
}
}
2)运用验证框架
1. 对所有方法进行校验
在要校验的Action的包下建一文件 ActionName-validation.xml,如要对UserAction中所有方法都需要输入校验,则建文件UserAction-validation.xml
2. 对某个方法进行校验
在要校验的Action的包下建一文件 ActionName-action_url-validation.xml
action_url 是访问该Action时除namespace外那些
如: 要对UserAction中add()方法进行输入校验,则建文件UserAction-user_add-validation.xml
该Action在struts.xml里的配置如下:
<struts>
<package name="person" namespace="/user" extends="struts-default">
<action name="user_*" class="cn.itcast.action.PersonAction" method="{1}">
<result name="input">/index.jsp</result>
<result name="message">/WEB-INF/page/message.jsp</result>
</action>
</package>
</struts>
//表单里
<form action="user/user_add" method="post">
........
</form>
//ActionName-validation.xml
这个文件的模板在struts2 的示例程序里可找到
在xwork1.0.3.jar里的default.xml里可找到各种校验器
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN" "http://www.opensymphony.com/xwork/xwork-
validator-1.0.3.dtd">
<validators>
<field name="username">
<field-validator type="requiredstring"> <!--校验器requiredstring-->
<param name="trim">true</param> <!--给requiredstring的trim属性注入值-->
<message>用户名不能为空!</message>
</field-validator>
</field>
<field name="mobile">
<field-validator type="requiredstring"> <!--校验器requiredstring-->
<message>手机号不能为空!</message>
</field-validator>
<field-validator type="regex"> <!--校验器regex-->
<param name="expression"><![CDATA[^1[358]\d{9}$]]></param>
<message>手机号格式不正确!</message>
</field-validator>
</field>
</validators>
<![CDATA[^1[358]\d{9}$]]>
<![CDATA[ *** ]]> 表示里面的东西只当做普通字符串对待,也就是说,可以是一些特殊字符
校验文件执行顺序:BaseAction-validation.xml -> BaseAction-xxxxx-validation.xml ->UserAction-validation.xml ->UserAction-
xxxx-validation.xml
当冲突时,后面的把前面的覆盖