Struts2:效验器——注解

效验器三类:

编程式——Java代码

声明式——xml

注释法——@

注解验证可以修饰属性的getter方法,
也可以修饰执行方法
Action中校验失败时,返回input逻辑视图

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>
    <constant name="struts.enable.DynamicMethodInvocation" value="true" />
    <constant name="struts.devMode" value="true" />
    <constant name="struts.configuration.xml.reload" value="true" />
    <package name="p1" namespace="/" extends="struts-default">
        <action name="*Action" class="org.ah.s2.C1" method="{1}">
            <result name="success" type="dispatcher">
                /inputMsg.jsp
            </result>
            <result name="input">/index.jsp</result>
        </action>
    </package>
</struts>

 

 

Action:(没有:C1-validation.xml)

package org.ah.s2;

import java.util.Date;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.validator.annotations.CustomValidator;
import com.opensymphony.xwork2.validator.annotations.RequiredStringValidator;
import com.opensymphony.xwork2.validator.annotations.IntRangeFieldValidator;
import com.opensymphony.xwork2.validator.annotations.ValidationParameter;
import com.opensymphony.xwork2.validator.annotations.Validations;

public class C1 extends ActionSupport {
    private String uname;
    private String pwd;
    private String pwd2;
    private Date birth;
    private int weight;

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    public String getPwd2() {
        return pwd2;
    }

    public void setPwd2(String pwd2) {
        this.pwd2 = pwd2;
    }

    public Date getBirth() {
        return birth;
    }

    public void setBirth(Date birth) {
        this.birth = birth;
    }

    public int getWeight() {
        return weight;
    }

    public void setWeight(int weight) {
        this.weight = weight;
    }

    public void setUname(String uname) {
        this.uname = uname;
    }

    // 不能写在Model上
    // set方法不能丢
    // parameters是个数组,用{}包含
    @RequiredStringValidator(trim = true, message = "必须输入名字")
    @CustomValidator(type = "cn", parameters = { @ValidationParameter(name = "model", value = "all") }, message = "要中文")
    public String getUname() {
        return uname;
    }

    @Validations(
  requiredStrings
= { @RequiredStringValidator(fieldName = "pwd", message = "密码必须输入") },
  intRangeFields = { @IntRangeFieldValidator(fieldName = "weight", min = "1", max = "300", message = "体重必须在${min}和${max}之间") }
  )
public String m1() { return "success"; } }

 

自定义效验器:

package org.ah.s2;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import com.opensymphony.xwork2.validator.ValidationException;
import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport;

public class MyValidator extends FieldValidatorSupport {
    private String model;

    public String getModel() {
        return model;
    }

    public void setModel(String model) {
        this.model = model;
    }

    @Override
    public void validate(Object obj_i) throws ValidationException {
        // 字段名
        String fieldName = getFieldName();
        // 字段值
        Object fieldValue = getFieldValue(fieldName, obj_i);

        if (fieldValue instanceof String) {
            String strV = (String) fieldValue;
            /*
             * 中文unicode none:无中文 all :全中文
             */
            if ("none".equals(model)) {
                // compile:编译
                Pattern p = Pattern.compile("[\u4e00-\u9fa5]");
                Matcher m = p.matcher(strV);

                if (m.find()) {// 找到中文
                    // 效验失败(显示不出来,随便写写,不写不报错)
                    addFieldError(fieldName, obj_i);
                }
            } else if ("all".equals(model)) {
                if (!Pattern.matches("[\u4e00-\u9fa5]+", strV)) {
                    // 不是全中文
                    addFieldError(fieldName, obj_i);// 效验失败
                }
            }
        }
    }

}

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>
    <validator name="cn" class="org.ah.s2.MyValidator" />
</validators>

表示层:

index.jsp

    <s:form action="m1Action" method="post">
        <s:textfield name="uname" label="用户名" />
        <s:textfield name="pwd" label="密码" />
        <s:textfield name="pwd2" label="确认密码" />
        <s:textfield name="birth" label="生日" />
        <s:textfield name="weight" label="体重" />
        <s:submit value="提交"></s:submit>
    </s:form>

inputMsg.jsp 略

运行结果:

 

转载于:https://www.cnblogs.com/AndyHoo/p/6243623.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值