✅ 表单验证
📝 本节要点: 掌握 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 |
| 邮箱格式 | 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/>