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. MySQL防止delete命令删除数据

    在sql中删除数据库中记录我们会使用到delete命令,这样如果不小心给删除了很难恢复了,总结一些删除数据但是不在数据库删除的方法. 方法一 我常用的做法,就是在数据库中加一个删除标识字段,如: is ...

  2. atitit.产品console 日志的aticonsole 方案处理总结

    atitit.产品console 日志的aticonsole 方案处理总结 1. 主要原理流程 1 2. 调用代码 1 3. 内部主要实现 1 3.1. 放入消息 1 3.2. 读取消息 2 默认可以 ...

  3. Experience on Namenode backup and restore --- checkpoint

    Hadoop version: Hadoop 2.2.0.2.0.6.0-0009 Well, We can do this by building Secondary Namenode, Check ...

  4. yii2 beta版 执行流程

    yii2 beta版 执行流程 自动加载 1.composer的自动加载 //composer的加载实现了四种方式,可以看看 require(__DIR__ . '/../../vendor/auto ...

  5. iOS图片上传1

    这几天在搞iphone上面一个应用的开发,里面有需要摄像头/相册编程和图片上传的问题,在这里总结一下. [部分知识] iphone中图像通常存储在4个地方[相册.应用程序包.沙盒.Internet], ...

  6. Qt5中的QtGui

    我在学习Qt查看Qt Creater提供的例子时,遇到了一个小问题.就是明明在代码中包含了QtGui,然而编译的时候还是提示找不到QLabel的定义,以及其他一些类的定义,但是这是官方提供的文档的啊, ...

  7. django 文件上传(阿里云oss)下载(支持大文件下载)

    1.文件上传 Models 设计 class Upload_File(models.Model): image = models.FileField(upload_to='file/%Y/%m',de ...

  8. 插入节点insertBefore()

    http://www.imooc.com/code/1699 插入节点insertBefore() insertBefore() 方法可在已有的子节点前插入一个新的子节点. 语法: insertBef ...

  9. (转载) STL中map用法详解

    Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候 ...

  10. Idea上配置btm

    1.  先在eclipse中配置好项目,再讲配置好的项目导入到idea中