- 简介
- 使用校验器步骤
- 演示案例
- 常用校验器
- required
- requiredstring
- stringlength
- regex
- int
- double
- fieldexpression
- url
- date
- conversion
- visitor
- expression
- 参考
Struts2 的校验器是在后端对前端提交的数据进行校验,在调用 Action 的指定方法前会先调用校验器的有关方法,校验通过才会调用 Action 指定的方法,校验不通过则会调用 Action 的方法 input(),该方法返回字符串“input”。
校验不通过会将有关的提示信息存储到 Action 对象中的成员变量 validationAware 中(这个成员变量继承自 ActionSupport),然后再调用 Action 的方法 input()(这个方法继承自 ActionSupport),该方法返回字符串“input”。
控制器再将请求转发给名为“input”的 JSP 页面。
使用校验器步骤1.先写前端页面 JSP
写页面时要确定哪些字段的数据需要校验,在需要校验的字段旁边添加标签 ,如下所示:
td>邮箱:
2.写 Action
Action 的属性名称要和前端页面的字段名称保持一致。自定义的 Action 必须继承自 ActionSupport。
3.struts.xml 对 Action 配置
success.jsp
register.jsp
4.创建校验器配置文件
首先确定调用哪个 Action 需要校验请求参数的数据。
例如,调用名称为 register 的 Action 需要校验页面表单项的数据,那么就需要在 Action 所在的包目录下创建一个校验器配置文件,并且该配置文件的取名规则为:Action 类的名称-Action 的名称-validation.xml
Action 的名称:struts.xml 文件中标签 的属性 name 的值
例如,下面的 action:
success.jsp
register.jsp
访问 register,需要校验表单数据,那么就可以创建名为 RegisterAction-register-validation.xml 的配置文件。并将该配置文件存放在 RegisterAction 所在的包目录下。Maven 项目在开发时,只能将配置文件存放在目录 resources 下,因此需要将该配置文件存放在目录 resources 中相对应的包目录下,所以你要先在目录 resources 目录下创建和 RegisterAction 的包目录结构相同的目录,再将配置文件存放在对应的包目录下,如下图所示:
如果配置文件命名为 RegisterAction-validation.xml,则只要访问类 RegisterAction 就会去调用校验器。
校验器调用顺序: 按下面的顺序加载解析校验器配置文件,调用相应的校验器。 先加载 action类名-validation.xml,然后加载 action类名-name属性值-validation.xml 文件。
5.校验器配置
先指定被校验的字段,再指定校验器。谁被校验,由谁来校验!这是【字段 → 校验器】配置风格
例如:
邮箱不能为空
邮箱格式不正确
先指定校验器,再指定被校验的字段。由谁来校验,来校验谁!这是【校验器 → 字段】配置风格。
例如:
需要被校验的字段
参数值
提示信息
演示案例
项目结构图如下:
register.jsp的代码如下:
DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
注册
邮箱:
密码:
重复密码:
电话:
success.jsp的代码如下:
DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
注册成功
欢迎你 ${email}
RegisterAction 的代码如下:
package priv.lwx.struts2.validator.web;
import com.opensymphony.xwork2.ActionSupport;
/**
* description
*
* @author liaowenxiong
* @date 2022/5/31 18:43
*/
public class RegisterAction extends ActionSupport {
// 页面中需要校验的字段必须和Action的属性一一对应
private String email;
private String password;
private String repassword;
private String phone;
public String execute() throws Exception {
return SUCCESS;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getRepassword() {
return repassword;
}
public void setRepassword(String repassword) {
this.repassword = repassword;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}
struts.xml 的配置如下:
DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
success.jsp
register.jsp
RegisterAction-validation.xml 的代码如下:
DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.2//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
邮箱不能为空
邮箱格式不正确
密码不能为空
6
密码长度不能少于6位
两次密码不一至
电话号码格式不正确
常用校验器
Struts2 提供了大量的内置校验器,你可以在 xwork-core-2.1.6.jar 的 com.opensymphony.xwork2.validator.validators 下的 default.xml 中查看所有的内置校验器。
required必填校验器,要求field的值不能为null。
requiredstring必填字符串校验器,要求field的值不能为null,并且长度大于0
参数说明trim指定在校验字符串长度之前是否去除字符串前后的空格。 stringlength字符串长度校验器,要求field的值的长度必须在指定的范围内,否则校验不通过。
参数说明minLength指定最小长度。maxLength指定量大长度。trim指定在校验字符串长度之前是否去除字符串前后的空格。 regex正则表达式校验器,校验field的值是否与指定的正则表达式相匹配。
参数说明expression指定正则表达式(2.3.15版用regexExpression)。caseSensitive指定进行正则表达式匹配时是否区分大小写。 int整数校验器,要求field的值必须是整型数值,且数值必须在指定的范围内。
参数说明min指定最小值。max指定最大值。 double双精度浮点数校验器,要求field的值必须是double数值,并且数值必须在指定范围内。
参数说明min指定最小值。max指定最大值。 fieldexpressionOGNL 表达式校验器。要求 field 的值满足一个 ognl 表达式。
参数说明expression指定ognl表达式(表达式要写在
内)。
email
邮件地址校验器。如果field的值非空,则必须符合邮箱地址格式的要求(即必须是合法的邮箱地址)
url网址校验器。如果field的值非空,则必须符合url格式的要求(即必须是合法的URL地址)
date日期校验器,要求field的值必须是日期类型的,且日期值必须在指定范围内
参数说明min指定最小值。max指定最大值。 conversion转换校验器,指定在类型转换失败时,提示错误信息。
visitor用于校验action中的复合属性。它指定一个校验文件用于校验复合属性中的属性。
expressionOGNL表达式校验器。要求 field 满足一个ognl表达式。该校验器不可用在【字段 → 校验器】风格的配置中!
参数说明expression指定ognl表达式(表达式要写在
内)。
参考
1.https://www.cnblogs.com/likailan/p/3302284.html