Struts2学习笔记(十八):struts 中的数据校验:通过 XML 配置方式实现

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 验证特点:通用,但不够灵活,可以验证特定简单的业务;

适合:验证表单字段较多的情况,可以大大简化代码;

缺点就是配置文件过多。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值