Struts2学习笔记(十七):struts 中的数据校验:通过代码方式实现

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>

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 +
                '}';
    }
}

register.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<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>

1、通过代码方式验证 action 中所有的方法:

UserAction.java:

package com.struts.validation;

import com.opensymphony.xwork2.ActionSupport;

/**
 * 表单数据的校验:
 *  前台校验:主要是通过 js 验证,表单数据是否合法;
 *  后台校验:通过后台 java 代码进行验证;
 *
 * struts 的数据校验是通过拦截器完成的:
 *  <interceptor
 *      name="validation"
 *      class="org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor"/>
 *
 * 验证方式:
 *  代码方式验证 action 中所有的方法:
 *  代码方式验证 action 中指定的方法:
 *  XML 方式验证 action 中所有的方法:
 *  XML 方式验证 action 中指定的方法:
 *
 * 要想使用 struts 的数据校验功能,必须继承 ActionSupport;
 */
public class UserAction extends ActionSupport {

    // 封装表单提交的数据
    User user = new User();
    public User getUser() {
        return user;
    }
    public void setUser(User user) {
        this.user = user;
    }

    // 重写数据校验的方法:验证 action 中的所有方法
    @Override
    public void validate() {
        // 用户名非空校验
        if (user.getUsername() == null || "".equals(user.getUsername())){
            addFieldError("username", "用户名不能为空");
        }
        // 密码非空校验
        if (user.getPassword() == null || user.getPassword().equals("")){
            addFieldError("password", "密码不能为空");
        }
    }

    // 注册业务方法:希望数据校验
    public String register(){
        System.out.println(user);
        return SUCCESS;
    }

    // 列表展示业务方法:不希望数据校验,直接执行该业务方法;但是 validate() 会验证所有方法;
    public String list(){
        System.out.println("list");
        return SUCCESS;
    }
}

2、通过代码方式验证 action 中指定的方法:

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;
    }

    // 数据校验的方法:只验证 register 方法
    // 校验指定的方法编写规范:validate + 被校验的方法(首字母大写)
    public void validateRegister() {
        // 用户名非空校验
        if (user.getUsername() == null || "".equals(user.getUsername())){
            addFieldError("username", "用户名不能为空");
        }
        // 密码非空校验
        if (user.getPassword() == null || user.getPassword().equals("")){
            addFieldError("password", "密码不能为空");
        }
    }

    // 注册业务方法:希望数据校验
    public String register(){
        System.out.println(user);
        return SUCCESS;
    }

    // 列表展示业务方法:不希望数据校验,直接执行该业务方法;
    //  数据校验的方法 validateRegister(),只会校验 register 方法;
    public String list(){
        System.out.println("list");
        return SUCCESS;
    }
}

如果校验失败:用户名和密码为空,则跳转到错误视图,显示校验错误信息,如下:

代码验证:

优点:比较灵活,可以满足所有的需求;

缺点:比较繁琐,要写重复的判断验证逻辑;

适合:表单字段较少的情况用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值