首页 > 代码库 > Struts2:效验器——声明式

Struts2:效验器——声明式

就是用xml配置的方式,而不是Java代码的形式,那个是“编程式”

Action:

package org.ah.s2;import com.opensymphony.xwork2.ActionSupport;import com.opensymphony.xwork2.ModelDriven;public class C1 extends ActionSupport implements ModelDriven<Model> {    public String m1() {        return "success";    }    @Override    public Model getModel() {        return new Model();    }}

Model:

package org.ah.s2;import java.util.Date;public class Model {    private String uname;    private String pwd;    private String pwd2;    private Date birth;    private int weight;    public int getWeight() {        return weight;    }    public void setWeight(int weight) {        this.weight = weight;    }    public String getPwd2() {        return pwd2;    }    public void setPwd2(String pwd2) {        this.pwd2 = pwd2;    }    public String getUname() {        return uname;    }    public void setUname(String uname) {        this.uname = uname;    }    public String getPwd() {        return pwd;    }    public void setPwd(String pwd) {        this.pwd = pwd;    }    public Date getBirth() {        return birth;    }    public void setBirth(Date birth) {        this.birth = birth;    }}

struts.xml

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

表示层:

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>

input.jsp 无关大局,略

自定义效验器:

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 =http://www.mamicode.com/ 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>

 

配置效验器,其中使用了系统预定义效验器&自定义效验器

C1-validation.xml,和C1.java放在一起

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"    "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"><validators>    <field name="uname">        <field-validator type="requiredstring">            <param name="trim">true</param>            <message>必须输入名字</message>        </field-validator>        <field-validator type="cn">            <param name="model">all</param>            <message>需要中文</message>        </field-validator>    </field>    <field name="pwd">        <field-validator type="requiredstring">            <param name="trim">true</param>            <message>必须输入密码</message>        </field-validator>        <field-validator type="regex">            <param name="regex"><![CDATA[(\w{4,25})]]></param>            <message>您输入的密码只能是字母和数组,且长度必须在4到25之间</message>        </field-validator>    </field>    <field name="pwd2">        <field-validator type="fieldexpression">            <param name="expression"><![CDATA[pwd eq pwd2]]></param>            <message>两次输入密码不一致</message>        </field-validator>    </field>    <field name="birth">        <field-validator type="date">            <param name="min">1900-01-01</param>            <param name="max">2050-02-21</param>            <message>年纪必须在${min}到${max}之间</message>        </field-validator>    </field>    <field name="weight">        <field-validator type="conversion">            <message>体重请输入数字类型</message>        </field-validator>        <field-validator type="int">            <param name="min">1</param>            <param name="max">300</param>            <message>体重必须在${min}到${max}之间</message>        </field-validator>    </field></validators>

 

运行结果:

技术分享

 

Struts2:效验器——声明式