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

限定必须是合法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代码进行数据验证的更多相关文章

  1. elasticsearch查询所有数据restful api以及java代码实现

    原文:http://blog.java1234.com/blog/articles/366.html restful api实现如下: get http://192.168.1.111:9200/fi ...

  2. 今日头条移动app广告激活数据API对接完整Java代码实现供大家参考》》》项目随记

    这是自毕业后的第一篇博客,希望自己今后能养成写博客的一个好习惯.最近公司为了加速APP推广,采取在外部平台(如:今日头条)进行广告投放的方式,进行用户引流.因此我们需要对广告的激活数据进行一个检测,跟 ...

  3. 两步验证杀手锏:Java 接入 Google 身份验证器实战

    两步验证 大家应该对两步验证都熟悉吧?如苹果有自带的两步验证策略,防止用户账号密码被盗而锁定手机进行敲诈,这种例子屡见不鲜,所以苹果都建议大家开启两步验证的. Google 的身份验证器一般也是用于登 ...

  4. java代码导出数据到Excel、js导出数据到Excel(三)

     jsp内容忽略,仅写个出发按钮:          <button style="width: 100px" onclick="expertExcel()&quo ...

  5. 数据表自动生成java代码

    MyBatis生成代码需要用到mybatis-generator-core-1.3.2.jar.数据库连接驱动包和一个xml文件,xml文件一般命令为:generator.xml. Xml内容格式如下 ...

  6. Java代码使用正则验证和常用工具方法

    1.正则验证邮箱 public static boolean checkEmail(String email){ boolean flag = false; try{ String check = & ...

  7. java虚拟机jvm启动后java代码层面发生了什么?

    java虚拟机jvm启动后java代码层面发生了什么? 0000 我想验证的事情 java代码在被编译后可以被jdk提供的java命令进行加载和运行, 在我们的程序被运行起来的时候,都发生了什么事情, ...

  8. 读书笔记-浅析Java运行时数据区

    作为一个 Java 为主语言的程序员,我偶尔也需要 用 C/C++ 写程序,在使用时让我很烦恼的一件事情就是需要对 new 出来的对象进行 delete/free 操作,我老是担心忘了这件事情,从而导 ...

  9. 在js中嵌套java代码

    jsp中有时候在js中操作某些java后台传递过来的数据逻辑比较复杂,比如list内容的遍历,可以直接在页面上添加java脚本来执行内容,代码如下: //在js中插入java代码操作 <% // ...

随机推荐

  1. maven ArtifactTransferException:failure

    手动下载对应jar放在本地仓库 -> Update Dependencies(Maven4Myeclipse:eclipse上maven插件)

  2. 飘逸的python - ord和chr以及unichr

    ord是unicode ordinal的缩写,即编号 chr是character的缩写,即字符 ord和chr是互相相应转换的. 可是因为chr局限于ascii,长度仅仅有256. 于是又多了个uni ...

  3. OGG目的端的checkpoint table被drop的修复方法

    OGG目的端的checkpoint table被drop的修复方法 參考自:OGG Replicat Failed Due To Check_point Table beingTruncated (文 ...

  4. iOS第三方开源库的吐槽和备忘

    转自:http://blog.ibireme.com/2013/09/23/ios-third-party-libs/#more-41361 由 ibireme 发表于 2013/09/23 做iOS ...

  5. 成为 Team Leader 后我最关心的那些事

    成为 Team Leader 后我最关心的那些事   推荐序 老有人问我 iOS 开发如何提高,今天收到一个来自网易的朋友投稿,分享他在成为 iOS 项目负责人之后面临的问题.文章中分享的如何招人,如 ...

  6. angularjs 构建主页 内置过滤器、日期的格式化

    从构建负责管理主屏幕的 MainController 开始.在这个 MainController 控制器内,只需设置一个每秒运转一次,同时更新一个局部作用域变量的延时 angular.module(' ...

  7. lo4j 日志级别

    日志记录器(Logger)的行为是分等级的.如下表所示: 分为OFF.FATAL.ERROR.WARN.INFO.DEBUG.TRACE.ALL或者您定义的级别.Log4j建议只使用四个级别,优先级从 ...

  8. [C++]在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include StdAfx.h”

    问题现象:在写好的.cpp文件后,编译报错.提示"你建立的工程使用了预编译功能, cpp最前边要留一行这样的内容:#include "StdAfx.h"问题原因:网上说是 ...

  9. Fast RDP Brute暴力破解3389口令

    http://www.tuicool.com/articles/b67rQfr 下载地址:https://www.rekings.com/fast-rdp-brute-gui-v2-0/

  10. Unix系统编程()文件控制操作fcntl

    fcntl系统调用对一个打开的文件描述符执行一系列的控制操作. int fcntl(int fd, int cmd, -) cmd参数所支持的操作范围很广 fcntl的第三个参数以省略号表示,意味着可 ...