15 - Struts2 学习(5)— struts2表单验证

1 服务端 Action验证

1.1 方法1

public class UserAction extends ActionSupport implements ModelDriven<User> {

    private User user = new User();

    @Override
    public User getModel() {
        return user;
    }

    /*
    * struts2自带的表单验证
    * 第一种:重写 validate 方法,表单必须是 struts 的
    * 如果数据错误,向 FieldError 添加字段错误信息
    * addFieldError 里的 key 是表单的 name 的值
    * validate 对于 Action 来说是全局,也就是 action 的所有方法都会生效
    * */

    @Override
    public void validate() {
        if(StringUtils.isEmpty(user.getUsername())){
            addFieldError("username","用户名不能为空");
        }

        if(StringUtils.isEmpty(user.getPassword())){
            addFieldError("password","密码不能为空");
        }
    }

    public String register(){
        /*
        * struts2在使用模型驱动注入参数时,会自动类型转换
        * servlet 接收到表单的参数都是字符串类型
        * struts会把String 转为Date,boolean
        *
        * */
        System.out.println(user);

        /*IUserService us = new UserServiceImpl();
        us.register(user);
*/
        return NONE;
    }

}

1.2 方法2

public class UserAction extends ActionSupport implements ModelDriven<User> {

    private User user = new User();

    @Override
    public User getModel() {
        return user;
    }

    /**
    * struts2自带的表单验证
    * 第一种:写一个方法,格式: validate + 方法名(第一个字母大写)
    * 只针对方法有效,它是局部的字段校验
    * */
    public void validateRegister() {
        if(StringUtils.isEmpty(user.getUsername())){
            addFieldError("username","用户名不能为空");
        }

        if(StringUtils.isEmpty(user.getPassword())){
            addFieldError("password","密码不能为空");
        }
    }

    public String register(){
        System.out.println(user);
        return NONE;
    }

}

1.3 方法3

  • 在不需要验证的方法上加上注解
public class UserAction extends ActionSupport implements ModelDriven<User> {

    private User user = new User();

    @Override
    public User getModel() {
        return user;
    }
    
    @Override
    public void validate() {
        if(StringUtils.isEmpty(user.getUsername())){
            addFieldError("username","用户名不能为空");
        }

        if(StringUtils.isEmpty(user.getPassword())){
            addFieldError("password","密码不能为空");
        }
    }

    public String register(){
        System.out.println(user);
        return NONE;
    }

//    第三种方法
    @SkipValidation
    public String list(){
        return "list";
    }

}

2 XML 声明式验证

2.1 全局声明方式

  • 在action包中声明UserAction-validation.xml文件
  • 这种方式配置是全局配置,所有action的方法都会拦截验证
  • 如果其它方法不想验证,可配置@SkipValidation注解
  • dtd约束可以在xwork-core的jar包中找

在这里插入图片描述
在这里插入图片描述

<!DOCTYPE validators PUBLIC
        "-//Apache Struts//XWork Validator 1.0.3//EN"
        "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">

<validators>
    <!--第一种校验方式:field-->
    <field name="username">
        <field-validator type="requiredstring">
            <param name="fieldName">username</param>
            <message>用户名不能为空-xml</message>
        </field-validator>
    </field>

    <!--第二种校验方式-->
    <validator type="requiredstring">
        <param name="fieldName">password</param>
        <message>密码不能为空-xml</message>
    </validator>
    
</validators>

public class UserAction extends ActionSupport implements ModelDriven<User> {

    private User user = new User();

    @Override
    public User getModel() {
        return user;
    }

    public String register(){
        System.out.println(user);
        return NONE;
    }

//    第三种方法
    @SkipValidation
    public String list(){
        return "list";
    }

}

在这里插入图片描述

2.2 局部声明方式

  • 在action包中声明UserAction-register-validation.xml文件
    声明方式 Action类名-方法名-validation.xml
  • xml内容与上面的一样

3 验证器案例

  • 模型
public class Student {
    private String username;// 不能为空,去空字符串
    private int age; // 18~100
    private String email;
    private String password; // 3~8
    private String repassword;
    private int score;//必须是自然数
    private  String url;// 必须是一个路径 http://
    private String gender;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getRepassword() {
        return repassword;
    }

    public void setRepassword(String repassword) {
        this.repassword = repassword;
    }

    public int getScore() {
        return score;
    }

    public void setScore(int score) {
        this.score = score;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    @Override
    public String toString() {
        return "Student{" +
                "username='" + username + '\'' +
                ", age=" + age +
                ", email='" + email + '\'' +
                ", password='" + password + '\'' +
                ", repassword='" + repassword + '\'' +
                ", score=" + score +
                ", url='" + url + '\'' +
                ", gender='" + gender + '\'' +
                '}';
    }
}

-add.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<%@ taglib uri="/struts-tags" prefix="s" %>
<html>
<head>
    <title>注册用户</title>
    <%--设置回显信息为红色--%>
    <s:head></s:head>
</head>
<body>

<s:debug></s:debug>
<s:actionerror></s:actionerror>

添加学生
<s:form action="/stu/add.action">
    <s:textfield name="username" label="用户名" ></s:textfield>
    <s:textfield name="age" label="年龄" ></s:textfield>
    <s:textfield name="email" label="邮箱" ></s:textfield>
    <s:textfield name="password" label="密码"></s:textfield>
    <s:textfield name="repassword" label="确认密码"></s:textfield>
    <s:textfield name="score" label="成绩"></s:textfield>
    <s:textfield name="url" label="个人主页"></s:textfield>
    <s:radio list="{'男','女'}" name="gender" label="性别"></s:radio>

    <s:submit value="添加"></s:submit>
</s:form>
</body>
</html>
  • Action
public class StudentAction extends ActionSupport implements ModelDriven<Student> {

    private Student stu = new Student();

    @Override
    public Student getModel() {
        return stu;
    }

    public String add(){
        System.out.println(stu);
        return NONE;
    }

}


  • 验证器
    在这里插入图片描述
<!DOCTYPE validators PUBLIC
        "-//Apache Struts//XWork Validator 1.0.3//EN"
        "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">

<validators>
    <!--requiredstring 比 required 好些,会自动去除空格-->
    <validator type="requiredstring">
        <param name="fieldName">username</param>
        <message>用户名不能为空</message>
    </validator>

    <validator type="int">
        <param name="fieldName">age</param>
        <param name="min">18</param>
        <param name="max">100</param>
        <message>年龄在18~100</message>
    </validator>

    <validator type="email">
        <param name="fieldName">email</param>
        <message>邮箱格式不正确</message>
    </validator>

    <validator type="requiredstring">
        <param name="fieldName">password</param>
        <message>密码不能为空</message>
    </validator>
    
    <validator type="stringlength">
        <param name="fieldName">password</param>
        <param name="minLength">3</param>
        <param name="maxLength">8</param>
        <message>密码长度3~8</message>
    </validator>

    <validator type="expression">
        <param name="expression">
            <![CDATA[ password == repassword]]>
        </param>
        <message>密码不一致</message>
    </validator>

    <!--score 必须是自然数-->
    <!--<validator type="regex">
        <param name="fieldName">score</param>
        <param name="regexExpression">\d+</param>
        <message>分数必须是数字</message>
    </validator>-->

    <validator type="url">
        <param name="fieldName">url</param>
        <message>url格式错误,以 http:// 开头</message>
    </validator>

    <validator type="required">
        <param name="fieldName">gender</param>
        <message>性别必填</message>
    </validator>
    
</validators>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值