第六章、Struts2数据校验
一、三种实现方式
① 用validate()方法实现数据校验
继承ActionSupport类,该类实现了Validateable接口,该接口中定义了一个validate()方法,在自定义的Action类中重写validate()方法,如果校验表单输入域出现错误,则将错误添加到ActionSupport类的fieldErrors域中,然后通过OGNL表达式负责输出。
实现思路:
准备注册页面:regist.jsp

创建Action类ValidateAction,该类继承自ActionSupport,并重写execute(),因为要实现数据校验,所以需重写validate(),然后进行一系列的判定

public class ValidateAction extends ActionSupport{
private UserInfo info;
//确认密码
private String okpwd;
@Override
public String execute() throws Exception{
return SUCCESS;
}
//实现数据校验
@Override
public void validate() {
if(info.getUsername().length()==0){
addFieldError("username", "用户名不能为空");
}
if(info.getPassword().length()==0){
addFieldError("pwd", "密码不能为空");
}
if(!info.getPassword().equals(okpwd)){
addFieldError("pwd", "两次密码必须一致");
}
}

配置Action --struts.xml:
<!-- 测试validate方法 -->
<action name="Validate" class="cn.happy.action.ValidateAction">
<result name="success">success.jsp</result>
<result name="input">regist.jsp</result>
</action>
② 用execute()方法实现数据校验
继承自ActionSupport类,重写execute()。继承该类是因为它实现了Validateable接口,才能实现数据校验
相对于Validate()方法不同之处就是对hasErrors进行了判定,判定FieldError对象中是否有错误信息,若有错误信息,返回input
同理 配置Action如上所示

public class ExecuteAction extends ActionSupport {
private UserInfo info;
// 确认密码
private String okpwd;
@Override
public String execute() throws Exception {
if (info.getUsername().length() == 0) {
addFieldError("username", "用户名不能为空");
}
if (info.getPassword().length() == 0) {
addFieldError("pwd", "密码不能为空");
}
if (!info.getPassword().equals(okpwd)) {
addFieldError("pwd", "两次密码必须一致");
}
//判定FieldError对象中是否有错误信息
//若有错误信息 则返回input
if(this.hasErrors()){
return INPUT;
}
return SUCCESS;
}

③ 用validateXxx()方法实现数据校验
在validate()方法中对数据验证是可以工作的,如果在字段非常多的情况下,而且每个字段又有很复杂的验证,那么我们的validate方法中的代码会越来越多。 针对特定的方法输入的数据的验证我们把他放到validateXxx方法中,Xxx是方法名的首字母大写形式。
一般在字段判定比较多的情况下,可以使用这种方式实现数据校验。提取到自定义的方法中


Struts.xml不同之处在于,通过method="regist"确认调用哪个方法

实现效果:
若用户无输入:

若输入符合匹配条件:


二、用struts2的验证框架实现数据校验
① 为什么要用验证框架:
当验证规则比较复杂时,Action类的代码将变得很繁琐,假如我们要对电话号码的格式进行验证,是非常麻烦的
②验证框架的优点:
Struts2中内置了一个验证框架,将常用的验证规则进行了编码实现,使用验证框架时,用户无需再进行编码,只要在外部配置文件中指定某个字段需要进行的验证类型,并提供出错误信息即可,从而大大减轻了开发者的负担,提高开发效率
③命名规范:
1、文件的命名规则:
ActionName-validation.xml,ActionName为需要校验的Action类名,如:UserAction-validation.xml
2、文件存放路径:
该文件与Action类的class文件位于同一个路径下
3、文件格式:包括如下3个配置元素
<field>: 为每一个需要校验的字段添加一个验证元素<field>,name属性表示要校验的字段名。
<field-validator>: 使用该元素来指定校验规则,type属性为校验规则名
<message>: 使用该元素来指定校验出错时要显示的标签,key属性指向资源文件中的标签名
常用验证规则:

实现思路:
准备注册页面:

创建Action类,继承ActionSupport类,并重写execute(),封装实体类属性

配置Action--struts.xml

创建UserAction-validation.xml文件:
该文件头文件的查找位置:


<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> <validators> <!-- 用户名:不能为空 长度在6-10之间 -->
<field name="info.username">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>用户名不能为空</message>
</field-validator> <field-validator type="stringlength">
<param name="maxLength">10</param>
<param name="minLength">6</param>
<message>用户名长度必须在${minLength}和${maxLength}之间</message>
</field-validator> </field> <!-- 验证密码-->
<field name="info.password">
<field-validator type="requiredstring">
<message>密码不能为空</message>
</field-validator>
</field> <!-- 确认密码 --> <field name="okpwd">
<field-validator type="fieldexpression">
<param name="expression">info.password==okpwd</param>
<message>密码和确认密码必须一致</message>
</field-validator>
</field> <!-- 验证电话号码 --> <field name="info.phone">
<field-validator type="requiredstring">
<message>电话号码不能为空</message>
</field-validator>
</field> <field name="info.phone">
<field-validator type="regex">
<param name="regex">^(\d{3,4}-){0,1}(\d{7,8})$</param>
<message>电话号码格式不正确</message>
</field-validator>
</field> </validators>

实现效果:
若都不输入:

若输入匹配上:


实现数据校验的流程:
① 对输入的数据首先进行类型转换,并封装成Action属性
② 如果类型转换出现错误,就将错误提示保存到ActionContext,并封装到fieldError中
③ 类型转换执行完毕后,会根据项目的配置执行验证框架的校验,也可能通过执行validate()或者validateXxx()方法进行校验
④ 如果经过以上步骤都没有出现错误,那么将直接调用Action里用于处理用户请求的方法,然后根据结果类型转入相应的视图资源。一旦出现了错误,那么系统将直接返回输入数据的视图资源,后者通常由workflow拦截器处理

第六章、Struts2数据校验的更多相关文章
- 06章 Struts2数据校验
一.三种实现方式 ① 用validate()方法实现数据校验 继承ActionSupport类,该类实现了Validateable接口,该接口中定义了一个validate()方法,在自定义的Actio ...
- Struts2数据校验
Struts2数据校验 1.常见数据校验方法 表单数据的校验方式: 表单中的数据必须被效验以后才能够被使用,常用的效验方式分为两种: 前台校验:也称之为客户端效验,主要是通过JS编程的方式进行表单数据 ...
- struts2 数据校验
通过struts2中延续自xwork框架的validation.xml配置方式进行数据校验,因struts2 下存在三种请求参数的注入方式,固按照不同注入方式对validation.xml的配置进行总 ...
- struts2 之 struts2数据校验
1. 数据校验一般分为2类:前端的校验(js校验),后端的校验(java代码):实际开发中大部分情况下都是采用js校验.在对数据安全要求较高的情况下可能会采用后端验证. 2. Struts2提供了后 ...
- struts2数据校验与国际化
数据校验: Action里的validate()方法能校验action类所有的方法,如果有错,如:addFieldError,会自动返回到workflow校验拦截器不向下继续进行,不用return i ...
- Struts2数据校验方法
方法: 1.在Action类中execute()方法中进行校验. 优点:Action类无需继承框架中的类. 缺点:(1)当有多个校验时,代码重复,违反高内聚,低耦合. 2.重写框架ActionSupp ...
- 第六章 DQL 数据查询语言
一.select 简单查询命令 #1.查询表中所有的数据 mysql> select * from test.student; #2.查看所有数据之前,先查看数据量 mysql> sele ...
- 第六章 大数据,6.3 突破传统,4k大屏的沉浸式体验(作者: 彦川、小丛)
6.3 突破传统,4k大屏的沉浸式体验 前言 能够在 4K 的页面上表演,对设计师和前端开发来说,即是机会也是挑战,我们可以有更大的空间设计宏观的场景,炫酷的转场,让观众感受影院式视觉体验,但是,又必 ...
- Struts2 数据校验之四兄弟
现在是科技的时代,大多数人都在网上购物了, 我们都碰到过相同的问题,各大网站弄的那些各种各样的注册页面,相信大家都深有体会. 有了这验证就很好的保证了我们的信息的准确性和安全性. 接下来我给大家讲解一 ...
随机推荐
- UITableView中的cell的优化
1.cell的重用 所谓的cell的重用就是,视图加载的时候只会创建当前视图中的cell,或者比当前视图多一点的cell, 当视图滚动的时候,滚出屏幕的cell会放进缓存中,滚进屏幕的cell会根据I ...
- <转>最新版SDWebImage的使用
我之前写过一篇博客,介绍缓存处理的三种方式,其中最难,最麻烦,最占内存资源的还是图片缓存,最近做的项目有大量的图片处理,还是采用了SDWebImage来处理,但是发现之前封装好的代码报错了.研究发现, ...
- Android Studio简单设置
IDE外观&行为 修改主题,修改全局字体 修改主题,想用炫酷的深色主题,就改成Darcula吧:字体的话,选一个带中文的,要不然会有很多口口,我这里用Microsoft YaHei UI,很不 ...
- Android 隐式意图激活另外一个Actitity
上篇文章<Android 显示意图激活另外一个Actitity>最后谈到显示意图激活另外一个Actitity会有一些局限性和弊端 本文介绍另一种方法:隐式意图激活另外一个Actitity ...
- 【代码笔记】iOS-两个时间字符串的比较
一,效果图. 二,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the ...
- 【代码笔记】iOS-对iphone手机进行判断的一些函数
代码: #import "RootViewController.h" //为判断手机的型号 -(NSString*)deviceString添加头文件 #import " ...
- C语言中的字符串
字符串 字符串 用双引号引起来的多个字符. 在C语言中字符串是用’\0’结束的.即每个字符串的最后一个字符是’\0’,但是结束符不显示,仅仅标志该字符串到这儿就结束了. 二.声明字符串 char *s ...
- 学习 java命令
依稀记得自己第一次编译*.java文件,第一次运行*.class文件.但是六七年过去了,现在运行java写的程序更多的是用tomcat这种web容器.最近有个小需求,写一个监控zookeeper集群的 ...
- CMMI4级实践中的5个经典问题及解答
这五个问题相当经典而且比较深,需要做过CMMI4.5级的朋友才能看懂这些问题.这5个问题是一位正在实践CMMI4级的朋友提出来的,而解答则是我的个人见解. 五个疑问是: A.流程,子流程部分不明白 ...
- php示例代码之 使用PHP的MySQL标准函数
<?php //连接参数 $host="localhost"; $user="root"; $pwd="111111"; $db=&q ...