<%@ page contentType="text/html;charset=UTF-8" language="java" %> 表单验证 - Struts2 学习

✅ 表单验证

📝 本节要点: 掌握 Struts2 的两种验证方式:编程式验证和声明式验证

1. 验证方式概览

方式 实现方式 适用场景
编程式 重写 validate() 方法 简单验证,逻辑复杂
声明式 - 方法级 validateXxx() 方法 特定方法的验证
声明式 - XML XxxAction-validation.xml 可复用,团队协作

2. 方式一:编程式验证 (validate)

public class LoginAction extends ActionSupport {
    
    private String username;
    private String password;
    
    @Override
    public String execute() {
        // 登录逻辑...
        return SUCCESS;
    }
    
    /**
     * 验证方法 - 对所有 execute 方法都生效
     */
    @Override
    public void validate() {
        // 用户名验证
        if (username == null || username.trim().length() < 3) {
            addFieldError("username", "用户名至少3个字符");
        }
        
        // 密码验证
        if (password == null || password.length() < 6) {
            addFieldError("password", "密码至少6个字符");
        }
    }
    
    // getter/setter...
}

3. 方式二:方法级验证 (validateXxx)

/**
 * 只验证 register 方法,不验证 login 方法
 */
public void validateRegister() {
    if (email == null || !email.contains("@")) {
        addFieldError("email", "邮箱格式不正确");
    }
}

4. 方式三:XML 声明式验证

优点: 验证规则与代码分离,团队协作更清晰,可复用

4.1 创建验证文件

文件名格式:ActionName-validation.xml

位置:WEB-INF/classes/com/demo/action/

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
    "-//OpenSymphony Group//XWork Validator 1.0.3//EN"
    "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">

<validators>
    <!-- 字段验证 -->
    <field name="username">
        <field-validator type="requiredstring">
            <message>用户名不能为空</message>
        </field-validator>
        <field-validator type="stringlength">
            <param name="minLength">3</param>
            <param name="maxLength">20</param>
            <message>用户名长度3-20字符</message>
        </field-validator>
    </field>
    
    <!-- 字段验证:email -->
    <field name="email">
        <field-validator type="email">
            <message>邮箱格式不正确</message>
        </field-validator>
    </field>
    
    <!-- 非字段验证 -->
    <validator type="expression">
        <param name="expression">password==confirmPassword</param>
        <message>两次密码不一致</message>
    </validator>
</validators>

5. 常用验证器类型

验证器 说明 示例
required 必填 username 不能为空
requiredstring 字符串必填 不能为空字符串
stringlength 字符串长度 minLength, maxLength
email 邮箱格式 xxx@xxx.com
regex 正则表达式 手机号、身份证等
int 整数范围 min, max
url URL 格式 http://xxx.com
date 日期范围 min, max

6. 在 JSP 中显示错误

<%@ taglib prefix="s" uri="/struts-tags" %>

<!-- 显示特定字段的错误 -->
<s:fielderror fieldName="username"/>

<!-- 显示所有字段错误 -->
<s:fielderror/>

<!-- 显示 Action 级别错误 -->
<s:actionerror/>

<!-- 显示 Action 级别消息 -->
<s:actionmessage/>
下一节:数据封装 → ← 返回首页