Struts 2 输入检验
1 Struts 2 手动完成输入检验
1. 1 Struts 2通过继承 ActionSupport 类并重写Validate()方法
public class ValidateAction extends ActionSupport{
private String name;
private String pass;
public void setName(String name){
this.name=name;
}
//省略getXxx()和setXxx()方法
public String execute(){
return SUCCESS;
}
@Override
public void validate(){
if(getName()==null || getName().length()<6 || getName().length()>15){
addFieldError("name","用户姓名的长度不符合要求");
}
if(getPass()==null || getPass().length()<8 || getPass().length()>20){
addFieldError("pass","用户密码的长度不符合要求");
}
}
}
validate()方法中发现又不合法输入时,会调用其父类的addFieldError()方法,当执行execute()方法之前,系统会检查有没有addFieldError(),如果没有,则执行execute()方法,返回SUCCESS逻辑视图。
1.2 重写 validateXxx()方法
public class ValidateAction extends ActionSupport{
private String name;
private String pass;
//省略getXxx()和setXxx()方法
public String execute(){
return SUCCESS;
}
public String login(){
return SUCCESS;
}
public void validateLogin(){
if(name !=null && !Pattern.matches("\\w{6,15}",name.trim()))
{
addFieldError(name,"validateXxx()方法被执行:姓名不合法");
}
}
public void validate(){
if(name !=null && !Pattern.matches("\\w{6,15}",name.trim()))
{
addFieldError(name," validate () 方法被执行 :姓名不合法");
}
}
}
validateXxx()方法专门校验xxx()处理逻辑,执行过程和execute()一样。当同时重写validateXxx()和
validate()方法时,两者都会起到校验的效果,validateXxx()会在validate()之前执行。
2 Struts 2 内置校验器
2.1 字段校验器配置风格
<validators>
<field name = "被校验的字段">
<field-validator type = "校验器类型名">
<param name = "参数名">参数值</param>
<!-- 可以有多个参数 -->
<message> 检验失败时提示信息</message>
</field-validator>
</field>
</validators>
2.2 非字段检验器配置风格
<validator type = "检验器类型名">
<param name = "fieldName">需要被检验的字段</param>
<param name = "参数名">参数值</param>
<!--可以有0个或多个param参数-->
<message> 检验失败时的提示信息</message>
</validator>
常用内置检验器
(1)必填检验器
required 必填校验器,要求字段必须有值
参数fieldName:该参数指定校验的字段名称,如果是字段校验,则不用指定该参数
requiredstring 必填字符串校验器,要求必须有值且长度大于0,即不能是空字符串。默认会去掉字符串前后
空格
参数fieldName:该参数指定校验的字段名称,如果是字段校验,则不用指定该参数
参数trim:该参数为可选参数,用于指定是否在校验之前对字符串进行整理。
(2)整数校验器
int 整数校验器,可以配置整数在指定的范围内
参数fieldName:该参数指定校验的字段名称,如果是字段校验,则不用指定该参数
参数 min:指定字段值的最小值,该参数为可选
参数 max:指定字段值的最大值,该参数为可选
(3)字符串长度校验器
stringlength字符串长度校验器,用于检验字段中字符串长度是否在指定的范围
参数fieldName:该参数指定校验的字段名称,如果是字段校验,则不用指定该参数
参数trim:该参数为可选参数,用于指定是否在校验之前对字符串进行整理。
参数 maxLength:用于指定最大字符串长度,该参数为可选
参数 minLength:用于指定最小字符串长度,该参数为可选
(4)双精度校验器
double 双精度校验器,可以配置双精度数在指定的范围内
参数fieldName:该参数指定校验的字段名称,如果是字段校验,则不用指定该参数
参数 minInclusive:指定字段数值所接受的最小值,该参数为可选
参数 maxInclusive:指定字段数值所接受的最大值,该参数为可选
参数 minExclusive:指定字段数值被排除的最小值,该参数为可选
参数 maxExclusive:指定字段数值被排除的最大值,该参数为可选
(5)表达式校验器
expression 表达式校验器,它是一个非字段校验器,当参数expression计算的值为true时,校验通过,否则返回提示。
参数 expression:该参数为一个逻辑表达式,该参数使用OGNL表达式,并基于值栈计算,返回一个Boolean
类型值。
(6)表达式校验器
requiredstring 字段表达式校验器,当参数expression计算的值为true时,校验通过,否则返回提示。
参数fieldName:该参数指定校验的字段名称,如果是字段校验,则不用指定该参数
参数 expression:该参数为一个逻辑表达式,该参数使用OGNL表达式,并基于值栈计算,返回一个Boolean
类型值。
(7)网址校验器
url 网址校验器,要求被检查的字段如果非空,则必须是合法的URL地址。
参数fieldName:该参数指定校验的字段名称,如果是字段校验,则不用指定该参数
(8)邮件地址校验器
email 邮件地址校验器,要求被检查的字段如果非空,则必须是合法的邮件地址。
参数fieldName:该参数指定校验的字段名称,如果是字段校验,则不用指定该参数
(9) 复合类型校验器
visitor复合类型校验器
该校验器用来校验Action中定义的复合类型属性,支持简单的复合类型、数组类型。Map等集合类型。
参数fieldName:该参数指定校验的字段名称,如果是字段校验,则不用指定该参数
参数 context:校验器引用的上下文,可选参数
参数 appendPrefix: 为字段校验信息加前缀,可选参数