Action类继承了ActionSupport类,而该类实现了Action、Validateable、ValidationAware、TextProvider、LocaleProvider和Seriazbale接口。而其中Validatteable 接口定义了一个validateable()方法,只要在用户的Action中重写该方法就可以实现验证功能。

 /**
*会在执行execute之前执行,对传入的数据进行检验
*/
@Override
public void validate() {
// 如果用户名为空,就把错误信息添加到Action 类的 fieldError
if (user.getUsername()==null||user.getUsername().trim().equals("")) {
addFieldError("user.username", "用户名必须填!");
}
}

在类中定义了校验方法后,该方法会在执行系统的execute()方法执行之前执行,如果执行该方法之后Action类的fieldError中已将包含了数据校验错误信息,将把请求转发到input视图处。

     <action name="StrutsDemo1" class="cn.itcast.struts2.action.StrutsDemo1">
<!-- 配置结果页面的跳转 在Action 中根据不同的返回值配置不同的跳转页面 -->
<result name="success">/demo1/main.jsp</result>
<result name="input">login.jsp</result>
</action>

会在登录界面显示错误信息。

struts2提供了校验框架,只需要增加一个校验配置文件就可以完成对数据的校验。

命名格式:ActionName-validation.xml     其中ActionName就是需要校验的用户自定义的Action类的类名 ,且该文件应与Action位于同一路径,如果Action类中有多个方法,对应的struts.xml文件中就有多个Action配置,这时如果想对其中一个方法进行验证,命名应该为ActionName-name-calidation.xml,这里的name是在struts.xml中的Action属性里面的name。

 <?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>
<field name="user.username">
<!-- 验证字符串不能为空 ,选项必填-->
<field-validator type="requiredstring">
<!-- 去空格 -->
<param name="trim">true</param>
<!-- 错误提示信息 -->
<message>用户名必填</message>
</field-validator>
</field>
</validators>

其他整数校验器:

    <!-- 验证字符串不能为空 ,选项必填-->
<field-validator type="requiredstring">
<!-- 去空格 -->
<param name="trim">true</param>
<!-- 错误提示信息 -->
<message>用户名必填</message>
</field-validator> <!-- 整数大小校验器 -->
<field-validator type="int">
<param name="min">18</param>
<param name="max">100</param>
<message>必须在18和100之间</message>
</field-validator> <!-- 日期校验器 -->
<field-validator type="date">
<param name="min">1990-01-01</param>
<param name="max">2017-01-01</param>
<message>日期必须在1990-01-01到2017-01-01之间</message>
</field-validator> <!-- 邮件地址校验器 -->
<field-validator type="email">
<message>必须是有效的email地址</message>
</field-validator> <!-- 网址地址校验器 -->
<field-validator type="url">
<message>必须输入有效的网址</message>
</field-validator> <!-- 字符串长度校验器 -->
<field-validator type="stringlength">
<param name="minlength">6</param>
<param name="maxlength">20</param>
<message>字符长度必须在6到20之内</message>
</field-validator> <!-- 正则表达式校验器 -->
<field-validator type="regex">
<param name="expression"><![CDATA[(\d{6})]]></param>
<message>必须是6位的数字</message>
</field-validator>

Struts数据验证的更多相关文章

  1. struts 数据验证

    1. validate()验证 将对页面表单验证的内容写到validate()方法中,实现验证和业务处理内容的分离 在Action中添加 validate()方法   public void vali ...

  2. Struts数据效验

    表单数据的验证: 前台验证:主要是通过JS验证, 表达数据是否合法! 后台验证:通过后台java代码进行验证! Struts也提供了数据效验的方式! Struts数据效验, 通过拦截器完成: < ...

  3. Java实战之01Struts2-03属性封装、类型转换、数据验证

    九.封装请求正文到对象中 1.静态参数封装 在struts.xml配置文件中,给动作类注入值.调用的是setter方法. 原因:是由一个staticParams的拦截器完成注入的. 2.动态参数封装: ...

  4. Struts2(二)之封装请求正文、数据类型转换、数据验证

    一.封装请求正文到对象中(重点) 1.1.静态参数封装 在struts.xml文件中,给动作类注入值,使用的是setter方法 1.2.动态参数封装 通过用户表单封装请求正文参数 1.2.1.动作类作 ...

  5. struts2(三)---struts2中的服务端数据验证框架validate

    struts2为我们提供了一个很好的数据验证框架–validate,该框架可以很方便的实现服务端的数据验证. ActionSupport类提供了一个validate()方法,当我们需要在某一个acti ...

  6. strut2 的数据验证

    数据验证 用户的输入验证,必须做,且工作量巨大. 1.验证的方式 客户端验证:javascript 服务端验证:逻辑验证(我们的代码) 注意:如果客户端和服务端二选一的话,服务器端的不能省. 实际开发 ...

  7. 学习Struts--Chap06:Struts2之数据验证

    1.数据验证的概述 1.1.数据验证的重要性 数据验证是非常必要的,不但和我们的常识性理解有关系,还有可能涉及到一些非法输入等问题,所以我们需要进行必要的数据验证,以保证我们在数据输入的时候都是正确且 ...

  8. Struts2数据验证机制

    1. 手动验证的实现 只需要在继承ActionSupport类的情况下,直接重写validate()方法即可.使用validate()方法可以对用户请求的多个Action方法进行验证,但其验证的逻辑是 ...

  9. 01_11_Strtus2简单数据验证

    01_11_Strtus2简单数据验证 1. 引入struts标签 <%@taglib uri="/struts-tags" prefix="s" %&g ...

随机推荐

  1. ios打电话发短信接口

    电话.短信是手机的基础功能,iOS中提供了接口,让我们调用.这篇文章简单的介绍一下iOS的打电话.发短信在程序中怎么调用. 1.打电话 [[UIApplication sharedApplicatio ...

  2. 微信小程序 video组件 不随页面滚动

    1.页面初始化(滚动前)时,video所在位置 2.页面滚动后,video视频组件所在位置 看了别人家的小程序并不会出现这种状况.最后检查发现,是页面包裹层设置了 height:100% 导致的 顺便 ...

  3. django-2 models

    一个model 对应DB的一张表 models 以类的形式表现: 一些字段.数据的一些行为 对类.类的对象 操作,无需写SQL = >  object relation mapping  ORM ...

  4. MapReduce架构与执行流程

    一.MapReduce是用于解决什么问题的? 每一种技术的出现都是用来解决实际问题的,否则必将是昙花一现,那么MapReduce是用来解决什么实际的业务呢? 首先来看一下MapReduce官方定义: ...

  5. UVa 1599 理想路径(反向BFS 求最短路径 )

    题意: 给定一个有重边有自环的无向图,n个点(2 <= n <= 100000), m条边(1 <= m <= 200000), 每条边有一个权值, 求从第一个点到n的最少步数 ...

  6. MySQL prepare语句的SQL语法

    MySQL prepare语法: PREPARE statement_name FROM preparable_SQL_statement; /*定义*/ EXECUTE statement_name ...

  7. hdu 4033 状态压缩枚举

    /* 看别人的的思路 搜索搜不出来我太挫了 状态压缩枚举+好的位置 */ #include<stdio.h> #include<string.h> #define N 20 i ...

  8. [thrift] thrift基本原理及使用

    参考文章RPC 基本原理与 Apach Thrift 初体验 RPC基本原理 RPC(Remote Procedure Call),远程过程调用,大部分的RPC框架都遵循如下三个开发步骤: 1. 定义 ...

  9. [bzoj3252]攻略_dfs序_线段树_贪心

    攻略 bzoj-3252 题目大意:给定一棵n个节点的有根树,点有点权.让你选出至多k个节点,使得他们到根的链的并最大. 注释:$1\le n\le 2\cdot 10^5$,$1\le val_i\ ...

  10. linux network name space

    linux network namespace概念类似于网络中的 VRF (virtual routing and forwarding).但是,你不知道VRF的概念也没关系,下面我们通过一个简单的介 ...