struts2编程式校验和声明式校验

1.struts2数据验证

验证的方式

  • 客服端校验:使用js结合正则表达式来校验,不和服务器打交道,开发简单,安全性差
  • 服务器端校验:请求web服务器,开发量比较大,但是安全性好,如果需要和数据库打交道的就必须要使用服务器端校验。
  • 实际开发中,客户端校验比较多,最好的是客户端和服务端都校验。
  • struts2的校验属于服务器端校验。

(1)struts2编程式校验

编程式校验:重写父类的validate方法,在这个方法中对每一个字段来做校验,但是校验的前提是提交过来的参数是能相互转换的,如果转换不了的话会由param,modelDriven拦截器来负责。如果参数不符合正则,我们可以添加提示信息。

/**
     * 在封装参数之前做验证,如果验证不通过,跳转到表单页面
     */
    @Override
    public void validate() {
        if(!person.getName().matches("[a-zA-A]{3,8}")){
            // 添加提示信息,第一个参数是字段名表单中的文本域的name,第二个是提示信息
            addActionError("name", "姓名只能是大小写字母(3-8位)");
        }
    }

    private void addActionError(String name, String s) {
        this.addActionError(name, s);
    }

}

 

2.跳出校验:在编程校验中,validate会对当前的action类中的每一个方法做校验,那么有一些方法是不需要校验的,我们可以通过@SkipValidation来跳过校验。

  • 我们在Action中定义一个验证方法,命名规则是validate+【要验证的方法名】,那么这个方法就会被校验,如validateSave,那么save方法会被校验,其余的方法的都不会被校验。
    // 跳出校验
    @SkipValidation
    public String delect() {
        System.out.println(person);
        return super.SUCCESS;
    }
    public void validateSave() {
        if(!person.getName().matches("[a-zA-A]{3,8}")){
            // 添加提示信息,第一个参数是字段名表单中的文本域的name,第二个是提示信息
            addActionError("name", "姓名只能是大小写字母(3-8位)");
        }
    }

    (1)struts2声明式验证

    为了解决Action和验证逻辑的高耦合,我们可以使用声明式验证,我们要把验证规则配置在xml中。

    规则:在Action的同级包下创建一个xml,名称规范:Action名称validation.xml

  • 打开xwork-validator-config-1.0.dtd,把头信息copy到我们的xml中

     

  • 我们对xml的配置

3.系统提供的校验器参数配置如下:

 

regex的使用:

<?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>
    <!--表单中要提交的文本域
        name:文本域的name值
    -->
    <field name="name">
        <!--文本域的验证器-->
        <field-validator type="requiredstring">
            <message>姓名不能为空</message>
        </field-validator>
        <field-validator type="regex">
            <param name="regex">[a-zA-Z]{3,8}</param>
            <message>姓名为3-8位的字符</message>
        </field-validator>
    </field>
    <!--第二种验证的配置方式-->
    <validator type="regex">
        <!--配置验证的字段-->
        <param name="fieldName">address</param>
        <!--验证的正则-->
        <param name="regex">\d{6,8}</param>
        <!--提示信息-->
        <message>请输入6-8位的文本</message>
    </validator>
</validators>

 

expression的校验:

<validator type="expression">
    <param name="fieldName">repwd</param>
    <param name="expression">pwd == repwd</param>
    <message>两次密码必须一致</message>
</validator>

 jsp界面

<tr>
  <td>密码</td>
  <td><input type="text" name="pwd"></td>
  <td><s:fielderror fieldName="pwd"></s:fielderror></td>
</tr>
<tr>
  <td>重复密码</td>
  <td><input type="text" name="repwd"></td>
  <td><s:fielderror fieldName="repwd"></s:fielderror><s:actionerror></s:actionerror></td>
</tr>

int的使用:

<field name="age">
    <field-validator type="int">
        <param name="min">0</param>
        <param name="max">150</param>
        <message>年龄必须在${min}到${max}之间</message>
    </field-validator>
</field>



<!--jsp界面-->
<tr>
  <td>年龄</td>
  <td><input type="text" name="age"></td>
  <td><s:fielderror fieldName="age"></s:fielderror></td>
</tr>

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值