14 Struts2 验证框架

12 篇文章 0 订阅
8 篇文章 0 订阅

数据校验

数据校验是程序中最常见的模块。数据校验的目的就是保证用户输入是合法有效的。常见数据校验分三种:
1. 前台通过JavaScript校验(客户端校验);
特点:① 减少客户等待时间;② 减少服务器压力
2. 后台代码校验(服务端校验);
① 防止”绕过”客户端验证提交非法数据。② 可以在服务端处理数据前确保数据的合法性
3. 数据库校验(约束,非空等);在程序中能够使用第一种校验就使用第一种,第一种不能够完全校验采取第二种,尽可能不要用第三种校验;因为数据库资源十分珍贵。

struts2 数据校验

struts2 验证分两种:一种使用ActionSupport 编码实现验证。另外一种使用验证框架实现验证;

1. ActionSupport 实现验证
1.1 在业务方法中实现验证

1. 用ActionSupport实现验证
1. 在Action类的业务方法中直接验证
2. 重写validate()方法
3. 使用validateXxx()方法

2. 添加错误信息
addFieldError(String fieldName,String errorMessage) addFieldError用来添加字段相关的错误信息(用户名字段为空,年龄字段值不合理)

ddActionError(String anErrorMessage) addActionError添加与Action所处理业务相关的错误信息(用户名密码都填了,但填的不正确,无法登录)

3. 在页面输出验证结果

<!-- 输出一个或所有字段错误信息 -->
<s:fielderror/> 
<!-- 输出所有Action的错误信 -->
<s:actionerror/>
<!-- 输出指定某个错误信息 -->
<s:fielderror>
    <s:param>errorKey</s:param>
</s:fielderror>

4. <action>的配置

<result name="input">xxx.jsp</result>

Action 中通过hasErrors() , hasFieldErrors() , hasActionErrors() 来判断是否有错误信息

Action类

public String add1() {

    System.out.println("-------add1----");

    if (perion.getPname() == "") {
        addFieldError("pname", "账号不能为空!");
    }
    if ("" == perion.getPwd() || perion.getPwd().length() < 6) {
        addFieldError("pwd", "密码不能够为空且密码长度不能够小于6");
    }

    if (perion.getAge() < 18 || perion.getAge() > 25) {
        addFieldError("age", "年龄不合法,必须在(18-25)之间");
    }

    if (hasFieldErrors()) {
        return INPUT;
    }

    // 持久化操作
    return SUCCESS;
}

struts.xml

<action name="addPersion" class="com.javaee.struts2.action.PersionAction">
    <result>/show.jsp</result>
    <result name="input">/index.jsp</result>
</action>

JSP

<s:fielderror />
<s:fielderror>
    <s:param>age</s:param>
</s:fielderror>
<s:form action="addPersion!add1" method="post">

    <s:textfield name="pname" value="zhagnsan" label="账号" />
    <s:textfield name="pwd" label="密码" value="123" />
    <s:radio name="sex" list="{'男','女','人妖'}" label="性别" />
    <s:textfield name="age" label="年龄" value="14" />
    <s:select name="city" list="{'北京','天津','上海','重庆'}" label="城市" />

    <s:submit value="注册" />
</s:form>
1.2 使用validate()方法实现验证

使用使用validate() 方法验证步骤
1. 重写ActionSupper 类的 validate()方法
2. 在validate() 方法中实现验证
3. 将数据验证和业务处理分离
4. 添加与现实信息的方式不变

小经验
1. 接收参数时, 数据转换失败也会调用validate()方法。
2. validate()方法验证不通过,不会执行业务方法。

1.3 使用validateXxx()方法实现验证

validate()方法验证会对Action中所有的方法起作用,如果在实际需求中只需要对某个方法进行验证就需要使用validateXxx()方法进行数据校验。

validateXxx()方法验证
1. struts2支持validateXxx()方法针对xxx()方法进行数据验证
2. 使用validateRegister()方法实现针对register方法进行数据验证

小经验
1. validate()方法和validateXxx()方法同时存在时都会起作用
2. validateXxx()方法的调用优先于validate()方法

总结
1. 在Action中添加错误信息
     addFielError(errorKey,errorValue);
     addActionError(errorValue);
2. 在页面显示错误信息
     输出一个或所有字段的错误信息
     输出所有Action的错误信息
3. 实现验证位置
     在业务方法中直接实现数据校验
     在validate() 方法中实现数据校验
     在validateXxx() 方法中实现数据校验

2. 使用验证框架进行验证

使用验证框架验证优点
1. 验证部分复用、扩展容易
2. 验证和业务处理分离

使用验证框架步骤
1. 编写JSP页面
2. 编写Action及其配置文件
3. 在Action类同目录下创建ActionName-validation.xml文件
     ActionName 必须与Action类的名字一致
     -validation.xml 属于固定写法
4. 编写验证规则

2.1 使用ActionName-validation.xml 实现验证

struts2的几个常用的验证类

验证规则规则说明
required字段不能为空
requiredstring字符串不能为空
intint类型(可指定范围)
longlong类型(可指定范围)
shortshort类型(可指定范围)
doubledouble类型(可指定范围)
date时间格式(可指定范围)
expressionognl表达式判断
fieldexpressionognl表达式判断
email邮箱判断
urlurl路径判断
visitor把同一个验证程序配置文件用于多个动作(对一个Bean写验证文件,每个使用的Action只要引用)
conversion格式转换
stringlength字符串长度
regex正则表达式判断
2.2 使用ActionName-alias-validation.xml进行证

ActionName-validation.xml 对Action类中所有的业务方法都生效。如果只想验证某一个业务方法就需要使用ActionName-alias-validation.xml 进行验证

注意:alias 是struts.xml配置的Action的name名字不是方法名称

小结
1. ActionName-validation.xml 可对Action类中所有业务方法起作用
2. ActionName-alias-validation.xml 只针对Action类中某一个业务方法起作用
3. 以上两个文件都存在时,两个验证都起作用

验证顺序
1. Action父类-validation.xml
2. Action父类-alias-validation.xml
3. Action类-validation.xml
4. Action类-alias-validation.xml

总结
1. 使用ActionSupper实现验证有三种方式
     1. 在业务方法里面实现数据校验
     2. 在validate()方法中实现数据校验
     3. 在validateXxx()方法中实现数据校验
2. Action类中添加错误信息有两种方式
     1. 使用addFieldError() 添加字段错误信息
     2. 使用addActionError() 方法添加Action业务相关的错误信息
3. 使用验证框架验证
     1. ActionName-validation.xml
     2. ActionName-alias-validation.xml
     3. 验证框架规则看考帮助文档
4. 显示错误信息
     1. 输出一个或所有字段错误
     2. 输出所有Action的错误信息

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值