Struts2方便实用的内置校验器

转自:点我阅读原文

Struts2提供的声明式验证器在xwork-core-**.jar包的 
com\opensymphony\xwork2\validator\validators\default.xml配置文件中 ,打开文件我们可以看到所有验证器声明:

<validators>
    <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
    <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
    <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
    <validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>
    <validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>
    <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
    <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
    <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
    <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
    <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
    <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
    <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
    <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
    <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
    <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
    <validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>
</validators>
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

下面我们以一个小例子来试用一下部分的验证器

需求:对用户注册页面中的信息进行验证

先做准备工作: 
先得有一个注册页面:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>regist page</title>
    <s:head/>
  </head>


  <body>
    <s:form action="regist">
        <s:textfield name="user.username" label="用户名" requiredLabel="true" requiredPosition="left"></s:textfield>
        <s:textfield name="user.password" label="密码" requiredLabel="true" requiredPosition="left"></s:textfield>
        <!-- list的取值是一个ONGL表达式,创建了一个Map对象。必须有name -->
        <s:radio name="user.gender" list="#{'male':'男性','female':'女性'}" label="性别" requiredLabel="true" requiredPosition="left"></s:radio>
        <!-- list的取值是一个ONGL表达式,创建了一个List对象。必须有name -->
        <s:checkboxlist name="user.hobbies" list="{'吃饭','睡觉','学java'}" label="爱好"></s:checkboxlist>
        <s:textfield name="user.birthday" label="出生日期:yyyy-MM-dd"></s:textfield>
        <s:textfield name="user.email" label="邮箱"></s:textfield>
        <s:textfield name="user.grade" label="成绩"></s:textfield>
        <s:submit value="注册"></s:submit>
    </s:form>
  </body>
</html>

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

打开之后,显示为: 
初始表单

对应的Action和model如下:

package demo.action;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

import demo.model.User;

public class UserAction extends ActionSupport implements ModelDriven<User> {

    private static final long serialVersionUID = -5966666848749797668L;

    private User user = new User();

    @Override
    public User getModel() {
        if (this.user == null) {
            this.user = new User();
        }
        return this.user;
    }

    public String regist() {
        System.out.println(this.user);
        return SUCCESS;
    }

}

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
package demo.model;

import java.io.Serializable;
import java.util.Date;

public class User implements Serializable {
    private String username;
    private String password;
    private String gender;
    private String hobbies;
    private Date birthday;
    private String email;
    private int grade;

    @Override
    public String toString() {
        return "User [username=" + username + ", password=" + password
                + ", gender=" + gender + ", hobbies=" + hobbies + ", birthday="
                + birthday + ", email=" + email + ", grade=" + grade + "]";
    }

    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 getGender() {
        return gender;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    public String getHobbies() {
        return hobbies;
    }
    public void setHobbies(String hobbies) {
        this.hobbies = hobbies;
    }
    public Date getBirthday() {
        return birthday;
    }
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public int getGrade() {
        return grade;
    }
    public void setGrade(int grade) {
        this.grade = grade;
    }
}

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65

struts.xml配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
    <package name="user" extends="struts-default" namespace="/user">
        <action name="regist" class="demo.action.UserAction" method="regist">
            <result>/success.jsp</result>
            <result name="input">/register.jsp</result>
            <result name="error">/index.jsp</result>
        </action>
    </package>
</struts>
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

记得最后配置好web.xml中的struts过滤器,到此,准备工作就完成了

要使用声明式验证,那么需要在动作类对应的包中,建立一个名为 动作类名-validation.xml的配置文件 
本例中,由于UserAction是在demo.action包中,那么我们就在该包中建立名为UserAction-validation.xml的配置文件 
验证配置文件位置 
配置文件的doctype可以在xwork-core-**.jar中的dtd文件中找到,我们以xwork-validator-1.0.3.dtd这个文件为例,打开后复制里面的doctype,放置在我们新建的配置文件中

<?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">
 
 
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

下面,我们就来用针对字段设置验证器的方式一一试验一下几个验证器

首先我们来试试用户名必填,这里需要注意内置验证器的required和requiredstring的区别,前者是验证字段不能为null,而后者是验证不能为空字符串 
由于页面传递过来的字符串,不可能为null,如果没有值,会传递一个空字符串到服务器,而且用以接收的模型类中,对于这个字段也是使用的String来接收 
所以,对于页面的输入框字段,后台又是使用String来接收的字段,需要使用的是requiredstring

本例中,我们在UserAction-validation.xml中,添加如下验证规则:

注意:若是表单中数据name="user.username" 在field name依然只写user.username

<?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>
    <!-- 
            filed表示是字段验证方式,
            name属性指定要验证的字段,与表单传递的字段名一致
     -->
    <field name="user.username">
        <!-- 指定验证规则,使用type属性指定验证器 -->
        <field-validator type="requiredstring">
            <!-- 错误提示信息 -->
            <message>请输入用户名</message>
        </field-validator>
    </field>

    <field name="user.email">
        <!-- email其实是regex验证规则的一个子类,只是专门为邮箱写了一个表达式来验证 -->
        <field-validator type="requiredstring">
            <!-- 错误提示信息 -->
            <message>请输入邮箱</message>
        </field-validator>
        <field-validator type="email">
            <message>请输入正确的邮箱</message>
        </field-validator>
    </field>
    
    <field name="user.birthday">
        <field-validator type="required">
            <!-- 错误提示信息 -->
            <message>请输入用户生日</message>
        </field-validator>
        <field-validator type="date">
            <message>请输入正确的生日,注意日期的格式</message>
        </field-validator>
    </field>

    <field name="user.grade">
        <field-validator type="required">
            <!-- 错误提示信息 -->
            <message>请输入用户考试成绩</message>
        </field-validator>
        <field-validator type="int">
            <param name="min">1</param>
            <param name="max">150</param>
            <message>分数必须为1~150的整数</message>
        </field-validator>
    </field>
</validators>



一个字段可以如上配置多个验证器,这里有一个小提示,整型的字段,如果不填写,会有一个默认的字段值0

以下是摘自别人家的博客的内容,我忘记了哪位的了。。。

struts2提供了大量的内置校验器:我们可以在xwork-core-**.jar的com.opensymphony.xwork2.validator.validators下找到如下配置文件:default.xml。里面列出了所有的内置校验器。 
required:必填校验器,要求field的值不能为null。 
requiredstring:必填字符串校验器,要求field的值不能为null,并且长度大于0 
  属性——trim:指定在校验之前是否去除字段串前后的空格。 
stringlength:字段长度校验器,要求fidle的值必须在指定的范围内,否则校验失败。 
  属性——minLength:指定最小长度。 maxLength:指定量大长度。 trim:指定在校验之前是否去除字段串前后的空格。 
regex:正则表达式校验器,检查衩校验的field是否匹配一个正则表达式。 
  属性——expression:指定正则表达式(2.3.15版用regexExpression)。 caseSensitive:指定进行正则表达式匹配时是否区分大小写。 
int:整数校验器,要求field的整数值 必须在指定范围内。 
  属性——min:指定最小值。 max指定最大值。 
double:双精度浮点数校验器,要求field的双精度浮点数值必须在指定范围内。 
  属性——min:指定最小值。 max指定最大值。 
fieldexpression:字段OGNL表达式校验器。要求field满足一个ognl表达式。 
  属性——expression:指定ognl表达式


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值