1.编程校验:
在Action类中重写父类的validate方法,在这个方法中对每一个字段来做校验,但是校验的前提是提交过来的参数是能相互转换的,如果转换不了的话会由param,modelDriven拦截器来负责。如果参数不符合正则,我们可以添加提示信息addFieldError("id","id必须是1到5位的数字")
代码简单:
@Override
public void validate() {
/*
* 校验姓名name
*/
//如果name不符合正则[a-zA-Z]{3,8}那么就提示错误:addFiledError()
if(!person.getName().matches("[a-zA-Z]{3,8}")){
//提示错误
addFieldError("name", "姓名必须为3-8个字母");
}
}
同时需要在jsp中添加错误提示代码:
导包:
<%@taglib uri="/struts-tags" prefix="s"%>
错误提示代码:
<s:fielderror fieldName="name"></s:fielderror>
具体错误提示代码:
<s:fielderror name="name"></s:fielderror><br>
跳出校验
在编程式校验中validate会对当前的Action中的每一个方法做校验,那么有一些方法时不需要校验的,我们可以通过@skipValidation来跳过校验。
@SkipValidation
public String save(){
System.out.println("hello3");
return "success";
}
或者不重写validDate()方法,直接写:
2.我们在Action中定义一个验证方法,命名规则是validate+要验证的方法名,那么这个方法就会被校验如validateSave,save方法就会被校验,其余的方法都不会被校验
如果不挑出校验,但是你通过访问action[http://localhost:8080/struts2_01/delete]直接访问这个方法,那么就回报错。500
type Exception report
message
description The server encountered an internal error that prevented it from fulfilling this request.
exception
但是如果添加@skipvalidation那么就不会对这个方法校验,不论是你通过提交表单到这个方法,或者是直接访问这个方法,都不会报错,可以正确访问。
比如:只需要校验方法hello()那么就只需要写一个方法:
validDatehello()即可;
public String hello(){
System.out.println("hello3");
return "success";
}
@SkipValidation
public String save(){
System.out.println("hello3");
return "success";
}
public String delete(){
System.out.println("hello3");
return "success";
}
//* 编程校验,
public void validatehello() {
/*
* 校验姓名name
*/
//如果name不符合正则[a-zA-Z]{3,8}那么就提示错误:addFiledError()
if(!person.getName().matches("[a-zA-Z]{3,8}")){
//提示错误
addFieldError("name", "姓名必须为3-8个字母");
}
}
2.声明校验:
为了解决Action和验证逻辑的高耦合,我们可以使用声明式验证,我们要把验证规则配置在xml中。
规则:在Action的同级包下创建一个xml,名称规范:Action名称-validation.xml
打开xwork-validator1.0.3.dtd,把头信息拷贝到我们的xml中
头信息代码:
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
对验证做配置:
<?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 name="name">
<!-- 文本域验证器, type是验证类型 -->
<field-validator type="requiredstring">
<!-- 如果验证不通过,提示信息 -->
<message>
姓名不能为空
</message>
</field-validator>
</field>
</validators>
第二种方式:
<validator type="regex">
<param name="fieldName">password</param>
<param name="regex">\d{6,8}</param>
<message>密码必须是6-8位数字</message>
</validator>