博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第六章、Struts2数据校验
阅读量:5261 次
发布时间:2019-06-14

本文共 4019 字,大约阅读时间需要 13 分钟。

一、三种实现方式

① 用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:

success.jsp
regist.jsp

 


 

② 用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文件:

该文件头文件的查找位置:

 

        
true
用户名不能为空
10
6
用户名长度必须在${minLength}和${maxLength}之间
密码不能为空
info.password==okpwd
密码和确认密码必须一致
电话号码不能为空
^(\d{3,4}-){0,1}(\d{7,8})$
电话号码格式不正确

 实现效果:

若都不输入:

若输入匹配上:


实现数据校验的流程:  

① 对输入的数据首先进行类型转换,并封装成Action属性

② 如果类型转换出现错误,就将错误提示保存到ActionContext,并封装到fieldError中

③ 类型转换执行完毕后,会根据项目的配置执行验证框架的校验,也可能通过执行validate()或者validateXxx()方法进行校验

④ 如果经过以上步骤都没有出现错误,那么将直接调用Action里用于处理用户请求的方法,然后根据结果类型转入相应的视图资源。一旦出现了错误,那么系统将直接返回输入数据的视图资源,后者通常由workflow拦截器处理

 

转载于:https://www.cnblogs.com/hr1997/p/5953454.html

你可能感兴趣的文章
Zerver是一个C#开发的Nginx+PHP+Mysql+memcached+redis绿色集成开发环境
查看>>
多线程实现资源共享的问题学习与总结
查看>>
java实现哈弗曼树
查看>>
转:Web 测试的创作与调试技术
查看>>
程序的静态链接,动态链接和装载 (补充)
查看>>
关于本博客说明
查看>>
线程androidAndroid ConditionVariable的用法
查看>>
转载:ASP.NET Core 在 JSON 文件中配置依赖注入
查看>>
socket初识
查看>>
磁盘测试工具
查看>>
代码变量、函数命名神奇网站
查看>>
redis cli命令
查看>>
Problem B: 占点游戏
查看>>
python常用模块之sys, os, random
查看>>
HDU 2548 A strange lift
查看>>
Linux服务器在外地,如何用eclipse连接hdfs
查看>>
react双组件传值和传参
查看>>
[Kaggle] Sentiment Analysis on Movie Reviews
查看>>
价值观
查看>>
mongodb命令----批量更改文档字段名
查看>>