校验方式
客户端校验:JavaScript
服务器端校验:代码
实际开发:客户端+服务器端校验
服务器校验
1)编程式校验:动作类中写代码
a.针对动作类中的所有动作方法进行校验
在动作类中
//校验:针对所有的动作方法进行校验
public void validate(){
if(StringUtils.isEmpty(name)){
//姓名为空
addFieldError("name","姓名不能为空");
}
}
b.针对动作类中的指定方法进行校验
方式一:麻烦
//校验:针对保存方法进行校验
public void validateSave(){
if(StringUtils.isEmpty(name)){
//姓名为空
addFieldError("name","姓名不能为空");
}
}
public String save(){
System.out.println("保存:"+name+":"+birthday+":"+age);
return null;
}
//校验:针对更新方法进行校验
public void validateUpdate(){
if(StringUtils.isEmpty(name)){
//姓名为空
addFieldError("name","姓名不能为空");
}
}
public String update(){
System.out.println("更新:"+name+":"+birthday+":"+age);
return null;
}
方式二:使用注解,简单
public void validate(){
if(StringUtils.isEmpty(name)){
//姓名为空
addFieldError("name","姓名不能为空");
}
}
public String save(){
System.out.println("保存:"+name+":"+birthday+":"+age);
return null;
}
@SkipValidation
public String update(){
System.out.println("更新:"+name+":"+birthday+":"+age);
return null;
}
@SkipValidation
public String findAll(){
System.out.println("查询");
return null;
}
2)声明式校验:写配置文件
把校验规则和消息提示放到配置文件中。
a.针对动作类中的所有动作方法进行校验
在动作类所在的包中,建立名字为“动作类名-validatiobn.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="name">
<field-validator type="requiredstring">
<message>名字不能为空哦</message>
</field-validator>
</field>
-->
<!-- 形式二:验证器验证字段。还可以验证非字段的验证 -->
<validator type="requiredstring">
<param name="fieldName">name</param>
<message>亲,名字你怎么空着呢</message>
</validator>
</validators>
b.针对动作类中的指定方法进行校验
方式一:比较简单一点,使用@kipValidation注解
方式二:比较麻烦,动作类名-动作别名(指struts.xml中动作的名称)-validation.xml
专题:Strust2框架提供的内置验证器
3)自定义声明式校验器
编写一个类,集成FieldValidatorSupport,定义一个基于字段的验证器。
//验证密码的强度
public class StrongPasswordValidator extends FieldValidatorSupport {
//object:实际上就是动作类
public void validate(Object object) throws ValidationException {
String fieldName = getFieldName();//得到要验证的字段名
String fieldValue = (String) getFieldValue(fieldName, object);
if(StringUtils.isNotEmpty(fieldValue)){
//有值时再做强度验证
if(!isPasswordStrong(fieldValue)){
addFieldError(fieldName, object);
}
}
}
定义验证器后使用
在WEB-INF/classes目录下,建立一个名称为validators.xml的配置文件,如下:在声明式验证中使用。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator Definition 1.0//EN"
"http://struts.apache.org/dtds/xwork-validator-definition-1.0.dtd">
<validators>
<validator name="strong" class="com.itheima.validatiors.StrongPasswordValidator"/>
</validators>