struts 对于常用的验证进行了封装,即提供了验证器,验证指定的常用业务逻辑;
struts 提供的所有验证器 在 xwork-core-2.3.4.1.jar/com.opensymphony.xwork2.validator.validators/default.xml 下:
1、验证 Action 中所有的方法:
XML 配置文件名的定义规则:ActionClassName-validation.xml;
注意:此 XML 配置文件需要和当前要验证的 action 在同一目录下;例如下图:需要验证 UserAction 中的所有方法,那么 XML 配置文件就要和 UserAction.java 在同一目录下,且 XML 配置文件的名字必须为:UserAction-validation.xml;
UserAction-validation.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>
<!-- 验证 user 对象的 username 属性 -->
<field name="user.username">
<!-- 指定使用的验证器:验证器是 struts 定义好的,可以在
xwork-core-2.3.4.1.jar/com.opensymphony.xwork2.validator.validators/default.xml 中查看;
requiredstring 表示非空验证 -->
<field-validator type="requiredstring">
<!-- 验证失败的错误信息 -->
<message>用户名不能为空</message>
</field-validator>
</field>
<!-- 验证 user 对象的 password 属性 -->
<field name="user.password">
<!-- 非空验证 -->
<field-validator type="requiredstring">
<message>密码不能为空</message>
</field-validator>
<!-- 数据长度验证 -->
<field-validator type="stringlength">
<param name="minLength">6</param> <!-- 最小长度 -->
<param name="maxLength">10</param> <!-- 最大长度 -->
<message>密码长度必须是6-10位</message>
</field-validator>
</field>
<!-- 验证邮箱格式 -->
<field name="user.email">
<field-validator type="email">
<message>邮箱格式错误</message>
</field-validator>
</field>
<!-- 验证日期格式 -->
<field name="user.birth">
<field-validator type="date">
<message>日期格式错误</message>
</field-validator>
</field>
</validators>
UserAction.java:
package com.struts.validation;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport {
// 封装表单提交的数据
User user = new User();
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
// 注册业务方法:希望数据校验
public String register(){
System.out.println("register");
System.out.println(user);
return SUCCESS;
}
// 列表展示业务方法:不希望数据校验
public String list(){
System.out.println("list");
return SUCCESS;
}
}
User.java:
package com.struts.validation;
import java.util.Date;
public class User {
private String username;
private String password;
private String email;
private Date birth;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
", email='" + email + '\'' +
", birth=" + birth +
'}';
}
}
struts.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="user" extends="struts-default">
<action name="user_*" class="com.struts.validation.UserAction" method="{1}">
<result name="success">/index.jsp</result>
<!-- 错误视图:显示校验错误信息 -->
<result name="input">/error.jsp</result>
</action>
</package>
</struts>
register.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/user_register" method="post">
用户名:<input type="text" name="user.username"><br>
密码:<input type="password" name="user.password"><br>
邮箱:<input type="text" name="user.email"><br>
生日:<input type="text" name="user.birth"><br>
<input type="submit" value="注册">
</form>
</body>
</html>
error.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%-- 显示校验错误信息 --%>
<s:fielderror/>
</body>
</html>
验证失败,则跳转到错误视图 error.jsp,结果如下:
2、验证 Action 中指定的方法:
与验证 action 中所有方法相比,只有 XML 配置文件名不一样,XML 配置文件的内容完全一样;
验证 指定方法的 XML 配置文件命名规则:ActionClassName-ActionName-validation.xml;
ActionClassName 是 Action 类的名字,为 UserAction;
ActionName 是 struts.xml 中配置的 action 的 name 属性的值,此例中为 user_*,因为使用的是 通配符,但是如果想访问 action 中的 register 方法,那么 name 属性的值就会变成 user_register;
所以只验证 action 中 register 方法的 XML 配置文件名为:UserAction-user_register-validation.xml,配置文件的内容和上面一样。
XML 验证特点:通用,但不够灵活,可以验证特定简单的业务;
适合:验证表单字段较多的情况,可以大大简化代码;
缺点就是配置文件过多。