编程式校验
实现Validateable接口.接口中只有一个方法validate方法.我们可以在该方法中添加错误信息.
添加错误信息需要实现ValidationAware接口.该接口中有一些判断是否含有错误消息.获得错误消息.添加错误消息的方法.
配置式校验
Validation拦截器负责判断Action是否实现Validateable接口.如果实现就调用validate方法.
workflow拦截器判断Action是否实现ValidationAware接口. 如果实现就会判断Action中是否包含错误信息.如果包含错误信息, 停止拦截器递归调用,返回结果到名为input的结果页面中.
1、如果需要手动校验,必须实现接口:Validateable,提供一个方法 validate()
2、action所有方法校验
实现接口,并实现方法validate()
3、action单个方法校验
实现接口,并编写方法 validate方法() , 此处“方法”表示执行的方法名称,首字母大写。
例如:add() 执行前需要校验,必须编写 validateAdd()
注意:先执行“单个方法”校验,再执行“所有方法”校验
4、提供错误提示,阻止目标方法的执行
this.addFieldError("","") 给指定的字段设置提示信息
this.addActionMessage(aMessage)action提示提示信息
this.addActionError(anErrorMessage)action错误
位置:action类同包
名称:actionClass-actionName-validation.xml
actionClass :表示action类名
actionName:表示action访问名称,及
validation.xml :固定后缀
内容:xml必须提供约束(DTD、schema[命名空间])
dtd文件位置:xwork-core-2.3.15.3.jar!/xwork-validator-1.0.3.dtd
dtd文件内容:
位置:action类同包
名称:actionClass-validation.xml,解释同上
内容:同上
校验配置文件位置:xwork-core-2.3.15.3.jar!/com/opensymphony/xwork2/validator/validators/default.xml
验证拦截器validate:负责添加错误消息
判断是否实现了validatable接口,调用validate()方法
workflow拦截器: 查看是否有错误消息,跳转到错误页面
查看action当中是否有错误消息,如果有,返回一个input的结果串,跳转到错误页面
Demo1Action:
package cn.itcast.e_validate;
import java.util.Arrays;
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.sun.net.httpserver.Authenticator.Success;
public class Demo1Action extends ActionSupport{
private String name;
public String execute(){
System.out.println(name);
return SUCCESS;
}
//---------------------------------------------------
@Override
public void validate() {
//验证代码放入该方法
//判断name参数合法性
if(name ==null || "".equals(name)){
//不合法=> 调用addFieldError,添加错误信息
addFieldError("name", "用户名不能为空!");
}
//写死,添加非表单字段错误信息
addActionError("用户名已经重复!");
//写死,添加提示信息
addActionMessage("哈哈,这就是提示没别的意思!");
}
//----------------------------------------------------
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
/validate/demo1_2.jsp
/validate/demo1_2.jsp
demo1.jsp:
补充:
我们发现Struts2打印的类型转换错误信息是英文的,这说明我们需要自定义错误信息。自定义错误信息需要在Action所在目录下创建ActionName.properties文件(与Action同名的properties文件),然后在该文件中给出:invalid.fieldvalue.属性名=错误信息,其中invalid.fieldvalue是固定的。例如:invalid.fieldvalue.person=无法将请求参数转换成Person类型!
PersonAction.proeprties
invalid.fieldvalue.person=无法把表单参数转换成Person类型