struts2中的validate框架使用方法

struts2中的validate框架使用方法

手动参数校验

自己手动进行前台传递的参数的校验,需要action中复写validate方法,直接在方法中
写自己的逻辑

@Override
    public void validate() {

        if (user.getUsername() == null
                || user.getUsername().trim().length() == 0) {
            // 说明用户名为空

            this.addFieldError("username.message", "用户名不能为空");

        }

        if (user.getPassword() == null
                || user.getPassword().trim().length() == 0) {
            this.addFieldError("password.message", "密码不能为空");

        }

        if (!(user.getAge() >= 10 && user.getAge() <= 40)) {
            this.addFieldError("age.message", "年龄必须在10-40之间");
        }

        // System.out.println("validate......");
    }

如果想在这里单独校验某个方法,比如regist方法,可以自己写一个方法,方法名
要写成validateRegist,这样在接受到向该方法传递的参数时会执行此方法,而其他
方法接受参数不会执行该方法

以配置文件方式使用struts2中的校验器

想使用struts2自带校验器,需要在你的需要校验的action的包中新建xml,名称应该是
action类名-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">

 <!-- 注意这里的xml文件名称,action类名-validation.xml
 如果想只对testaction中的regist方法校验,而login不校验 ,应该
 将文件名称改为action类名-action名称-validation.xml(注意这里是
 action的名称而不是方法名)。还需要注意如果要校验特定方法,struts.xml文件中
 必须配置method,也就是不能使用动态方法调用该action方法-->

<!-- 根元素 -->
<validators>

    <!-- 子元素,name是属性名称 -->
    <field name="username">
        <!-- 校验器,type指定校验器,这里是指定username不能为空 -->
        <field-validator type="requiredstring">
            <!-- 校验器参数,例如这里可以指定校验字符串不去空格,
            参数名称要去相应的校验器中找(属性名) -->
            <!-- <param name="trim">true</param> -->
            <!-- 错误信息 -->
            <message>用户名不能为空</message>
        </field-validator>

        <field-validator type="stringlength">
            <param name="maxLength">10</param>
            <param name="minLength">6</param>
            <message>用户名必须在${minLength}到${maxLength}位</message>
        </field-validator>
    </field>

    <!-- 使用正则 -->
    <field name="telphone">
        <field-validator type="regex">
            <param name="regexExpression"><![CDATA[^135[0-9]{8}$]]></param>
            <message>电话号码必须是135xxxxxxxx</message>
        </field-validator>
    </field>
    <!-- 字段OGNL表达式校验器,要求field满足一个ognl表达式,
    expression参数指定ognl表达式,
    该逻辑表达式基于ValueStack进行求值,
    返回true时校验通过,否则不通过 -->
    <field name="repassword">
        <field-validator type="fieldexpression">
            <param name="expression"><![CDATA[(password==repassword)]]></param>
            <message>两次密码输入不一致</message>
        </field-validator>
    </field>
</validators>

如果想配置只校验某一个方法,请看上面配置文件中的注释

自定义校验器方法

想要自定义校验器,需要在class目录中(也就是src)目录中新建validators.xml文件:

<?xml version="1.0" encoding="UTF-8"?>

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

 <validators>
   <!-- 这里的name是在使用时用到的,class是你写的校验器的完整类名 -->
   <validator name="age" class="com.wz.validate.MyAgeValidator"></validator>
 </validators>

上面文件中的class中的校验器
public class MyAgeValidator extends FieldValidatorSupport{

    @Override
    public void validate(Object object) throws ValidationException {
//这里的   Object就是需要被校验的对象
        //首先获取字段的名称 age
        String fieldName=this.getFieldName();
        //获取字段的值
        Object fieldValue=this.getFieldValue(fieldName, object);
        //判断年龄是否为整数
        if(fieldValue instanceof Integer) {
            int age = (Integer) fieldValue;
            //判断年龄是否为负数
            if(age<0){
                //根据xml配置,将配置中的错误信息加入到FieldErrors中,给页面显示
                this.addFieldError(fieldName, object);
            }
        }
    }

}

然后就可以和使用自带校验器一样,在action-validation.xml中进行配置了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值