Struts2数据验证与使用Java代码进行数据验证
Struts2数据验证
使用Java代码进行数据验证
重写ActionSupport的validate()方法
对Action类的中所有请求处理方法都会进行验证!
对Action类的数据属性进行检查,如果发现错误,通过以下方法向Action添加错误信息:
addActionError(errorMessage) //添加action级别的错误
addFieldError(fieldName, errorMessage) //添加字段级别的错误
addActionMessage(message) //添加action消息
这三个方法实际上是通过ValidationAwareSupport类实现的,ActionSupport实现了ValidationAware接口
添加错误信息后,在页面上可以使用Struts2标签显示出来:
<s:actionerror />
<s:fielderror fieldName="">
<s:actionmessage />
验证Action中的请求处理方法
在Action类中添加void validateXXX()
方法即可针对XXX请求处理方法进行验证
使用XML进行数据验证
概述
这种验证的好处是,不需在Action类中写入大量的if/else/addFieldError代码--非侵入式--保证了业务逻辑代码的干净。同时直接提供了国际化支持。
不但支持xml方式定义规则,还支持使用注解!
推荐使用xml方式
验证规则
验证规则实际上是由xwork提供的,它们定义在struts2-core Jar包中,涉及:
com.opensymphony.xwork2.validator
//验证的核心类
com.opensymphony.xwork2.validator.validators
//除了验证规则实现类外,还有一个default.xml定义验证规则的名字
com.opensymphony.xwork2.validator.annotations
//定义具体的验证注解类
|
名称 |
参数 |
功能 |
范围 |
|
required |
不能为null |
field |
|
|
requiredstring |
trim=true |
不能为null且不能为empty |
field |
|
stringlength |
trim=true minlength maxlength |
限定字符串长度 |
field |
|
short int long |
min max |
限定整数的范围 |
field |
|
double |
minInclusive相当于>= maxInclusive相当于<= minExclusive相当于> maxExclusive相当于< |
限定数字的范围 |
field |
|
date |
min max |
限定日期范围 值为MM/DD/YYYY格式 |
|
|
|
限定必须是合法email地址 |
||
|
url |
限定必须是合法url地址 |
||
|
creditcard |
验证信用卡号 |
||
|
fieldexpression |
expression |
使用OGNL表达式进行验证 |
field |
|
expression |
expression |
使用OGNL表达式进行验证 |
action |
|
reges |
expression caseSensitive trim |
使用正则表达式进行验证 |
field |
|
visitor |
context //验证文件名插值 appendPrefix //错误消息前缀 |
Action中的属性是复杂对象,如果希望对这个对象进行特殊验证,则可使用visitor |
field |
注解验证
每个验证规则都有对象的注解,使用注解也可以开启验证,如:
@RegexFieldValidator(trim=true)
自定义验证
概述
如果内置的验证规则不能满足需要,可以自己定义验证规则类。大体上包括以下步骤:
1. 定义一个验证规则类:可以从ValidatorSupport或FieldValidatorSupport继承
2. 注册验证规则类:在类路径下创建validators.xml,添加<validator>配置节
3. 使用自定义的验证规则类:<field-validator type=”自定义验证规则类名”>
定义验证规则类
package com.zhiyou100.video.validator
public class IDCardValidator extends FieldValidatorSupport {
@Override
public void validate(Object object) throws ValidationException {
String fieldName = getFieldName();
Object value = getFieldValue(fieldName, object);
//如果验证时需要多个属性参与,而可以从object中取到更多的值
//还可以创建一个otherFieldName属性,让外界把其它属性名传进来
//验证逻辑
//addFieldError(fieldName, “错误信息”);
}
}
Struts2数据验证与使用Java代码进行数据验证的更多相关文章
- elasticsearch查询所有数据restful api以及java代码实现
原文:http://blog.java1234.com/blog/articles/366.html restful api实现如下: get http://192.168.1.111:9200/fi ...
- 今日头条移动app广告激活数据API对接完整Java代码实现供大家参考》》》项目随记
这是自毕业后的第一篇博客,希望自己今后能养成写博客的一个好习惯.最近公司为了加速APP推广,采取在外部平台(如:今日头条)进行广告投放的方式,进行用户引流.因此我们需要对广告的激活数据进行一个检测,跟 ...
- 两步验证杀手锏:Java 接入 Google 身份验证器实战
两步验证 大家应该对两步验证都熟悉吧?如苹果有自带的两步验证策略,防止用户账号密码被盗而锁定手机进行敲诈,这种例子屡见不鲜,所以苹果都建议大家开启两步验证的. Google 的身份验证器一般也是用于登 ...
- java代码导出数据到Excel、js导出数据到Excel(三)
jsp内容忽略,仅写个出发按钮: <button style="width: 100px" onclick="expertExcel()&quo ...
- 数据表自动生成java代码
MyBatis生成代码需要用到mybatis-generator-core-1.3.2.jar.数据库连接驱动包和一个xml文件,xml文件一般命令为:generator.xml. Xml内容格式如下 ...
- Java代码使用正则验证和常用工具方法
1.正则验证邮箱 public static boolean checkEmail(String email){ boolean flag = false; try{ String check = & ...
- java虚拟机jvm启动后java代码层面发生了什么?
java虚拟机jvm启动后java代码层面发生了什么? 0000 我想验证的事情 java代码在被编译后可以被jdk提供的java命令进行加载和运行, 在我们的程序被运行起来的时候,都发生了什么事情, ...
- 读书笔记-浅析Java运行时数据区
作为一个 Java 为主语言的程序员,我偶尔也需要 用 C/C++ 写程序,在使用时让我很烦恼的一件事情就是需要对 new 出来的对象进行 delete/free 操作,我老是担心忘了这件事情,从而导 ...
- 在js中嵌套java代码
jsp中有时候在js中操作某些java后台传递过来的数据逻辑比较复杂,比如list内容的遍历,可以直接在页面上添加java脚本来执行内容,代码如下: //在js中插入java代码操作 <% // ...
随机推荐
- maven ArtifactTransferException:failure
手动下载对应jar放在本地仓库 -> Update Dependencies(Maven4Myeclipse:eclipse上maven插件)
- 飘逸的python - ord和chr以及unichr
ord是unicode ordinal的缩写,即编号 chr是character的缩写,即字符 ord和chr是互相相应转换的. 可是因为chr局限于ascii,长度仅仅有256. 于是又多了个uni ...
- OGG目的端的checkpoint table被drop的修复方法
OGG目的端的checkpoint table被drop的修复方法 參考自:OGG Replicat Failed Due To Check_point Table beingTruncated (文 ...
- iOS第三方开源库的吐槽和备忘
转自:http://blog.ibireme.com/2013/09/23/ios-third-party-libs/#more-41361 由 ibireme 发表于 2013/09/23 做iOS ...
- 成为 Team Leader 后我最关心的那些事
成为 Team Leader 后我最关心的那些事 推荐序 老有人问我 iOS 开发如何提高,今天收到一个来自网易的朋友投稿,分享他在成为 iOS 项目负责人之后面临的问题.文章中分享的如何招人,如 ...
- angularjs 构建主页 内置过滤器、日期的格式化
从构建负责管理主屏幕的 MainController 开始.在这个 MainController 控制器内,只需设置一个每秒运转一次,同时更新一个局部作用域变量的延时 angular.module(' ...
- lo4j 日志级别
日志记录器(Logger)的行为是分等级的.如下表所示: 分为OFF.FATAL.ERROR.WARN.INFO.DEBUG.TRACE.ALL或者您定义的级别.Log4j建议只使用四个级别,优先级从 ...
- [C++]在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include StdAfx.h”
问题现象:在写好的.cpp文件后,编译报错.提示"你建立的工程使用了预编译功能, cpp最前边要留一行这样的内容:#include "StdAfx.h"问题原因:网上说是 ...
- Fast RDP Brute暴力破解3389口令
http://www.tuicool.com/articles/b67rQfr 下载地址:https://www.rekings.com/fast-rdp-brute-gui-v2-0/
- Unix系统编程()文件控制操作fcntl
fcntl系统调用对一个打开的文件描述符执行一系列的控制操作. int fcntl(int fd, int cmd, -) cmd参数所支持的操作范围很广 fcntl的第三个参数以省略号表示,意味着可 ...