数据校验的几种方式

转载 2013年12月04日 23:29:15

数据校验

1、复合属性和集合属性校验:

   集合属性校验需要三个文件,一个ActionName-validation.xml文件,用来表示配置哪个Action的数据校验,其类型需要为vistor类型,field的      name属性为Action中的属性名。在field-validator子元素下,需要指定context属性和appendPrefix属性。Context属性值表示该集合属性的检验其    名称,appendPrefix表示是否在校验信息中刚加入前缀信息。还需要一个类名-context值-validation.xml文件,其中类名为校验的Action中的属性    所属的复合类的名,context值为之前那个xml文件中context的值。这个xml文件中的配置和普通的校验配置没什么区别,如name为属性的字段名,    另外还需要一个ActionName.properties文件,其内容为Element_属性名=类名路径。如:一个POJO类为User;其中有userName,userEmail等字段,    其对应的Action为UserAction,该Action中有一个List<User> user属性,则校验userName的配置文件为

UserAction.xml:

<?xml version="1.0" encoding="gb2312" ?>

<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN""http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

<validators>

    <field name="user">

       <field-validator type="visitor">

           <param name="context">userContext</param>

           <param name="appendPrefix">true</param>

           <message>联系人</message>

       </field-validator>

    </field>

</validators>

User-userContext-validation.xml:

<?xml version="1.0" encoding="gb2312" ?>

<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

<validators>

    <field name="userName">

       <field-validator type="requiredstring">

           <message>姓名不能为空!</message>

       </field-validator>

    </field>

    <field name="userEmail">

       <field-validator type="email">

           <message>请输入正确的邮箱地址</message>

       </field-validator>

    </field>

</validators>

 

UserAction.properties:

Element_user=entity.User

 

注意:

1、User-userContext-validation.xml必须和User类文件在同一目录下

2、对于普通的符合属性,有两种校验方式,一是按照OGNL表达式语法,在jsp 和xml配置文件中都用”属性名.字段名”进行配置,则不需要visitor校验器   和 properties文件,只需要普通的ActionName-validation.xml文件即可,如验证Action中的一个属性User user,则在UserAction-validation.xml中配置field时,指定name属性的值为“user.userName“即可。

3、不管是什么样的情况,总要在struts.xml文件中配置input逻辑视图对应的资源文件,因为当校验不通过时,系统会返回input,然后对应找到相应的视图文件。

4、  Struts2对于客户请求,首先是客户端的js校验,然后进行类型转化,不管转换对不对,接着进行数据校验。在类型转换和服务器端输入校验过程中,无论出现什么错误,系统都不会执行execute()方法,将转向该Action对应的input视图。


Struts2数据校验有三种方式:

一是继承Action类ActionSupport类,重写validate()方法,在该方法中将校验信息通过addActionError()和addFieldError()添加fieldError中,即手动校验(代码核对)。Struts在执行execute之前,会先执行validate方法。对于Action中的其他方法,则需要添加validateXXX()方法,如Action中有一个add()方法和一个validateAdd()方法,系统会在执行add()之前先执行validateAdd()方法。(通过反射调用的)这里要注意,如果Action中同时有validateXXX()方法和validate()方法,则他们都会被调用,并都会起到校验作用。不论Action请求的是哪一个处理逻辑,validate()方法都会起到校验作用。且validateXXX()方法会在validate()方法之前被调用。不推荐使用这种校验方式,因为这样会使代码比较混乱。

二是使用校验框架,如配置XXXAction-validation.xml文件,即xml配置文件的校验

三是自定义校验器。如果内建校验框架不能满足要求,则可自定义一个校验器。需继承FieldValidaorSupport类,重写validate方法,然后在src或classes文件夹下添加validator.xml文件进行注册。注册是需要将default.xml文件中的所有内容复制进来,否则默认验证文件不生效了。---不推荐使用这种方法!


自动校验的实现步骤: ActionSupport中的addActionError()方法的实现:首先创建一个ArrayList对象,然后将错误信息添加到这个对象中。当调用getActionError()时,返回的是结合的一个副本而不是集合本身。所以当用this.getActionError().clear()或者this.getFieldError().clear()时清除的是副本中的元素而不是原集合中的元素,所以那些Error信息仍然存在。换句话来说,Action级别的校验错误信息对开发者来说是只读的。不过可以通过clearActionErrors()和clearFieldErrors()来直接清除多有错误,这样程序将转到会执行execute();fieldError校验信息的底层是通过LinkedHashMap来实现的,该Map的key是String类型,value是List<String>类型。也就是说,一个field Name可以对应多条错误信息,这些信息存放在List<String>中。---不推荐使用这种方法!


自动校验的注意事项: 

 Strues2内建校验器,括号内为常用或必须配置的参数:必填校验器required;必填字符串校验器requiredstring;字符串长度校验器stringlength(minLength和maxLength);整数校验器int(min,max);类型转换校验器conversion(repopulatedField指定当出现转换错误时,input视图是都要保留原值,默认true;另外还可以添加一个ActionName.properties文件用来优化提示信息);日期校验器date(mix,max);浮点数校验器double(minInclusive,maxInclusive,minExclusive,maxInclusive);邮箱地址校验器email;网址校验器url;表达式校验器expression(基于OGNL表达式,只能使用非字段风格配置);字段表达式校验器fieldexpression(expression);正则表达式校验器;visitor校验器



手动校验的例子:

public void validate() {

if(info == null)

addFieldError("userName", "未输入用户名");//保存错误

}


使用校验框架的例子:

required  必填校验器
<field-validator type="required">
       <message>性别不能为空!</message>
</field-validator>

requiredstring  必填字符串校验器
<field-validator type="requiredstring">
       <param name="trim">true</param>
       <message>用户名不能为空!</message>
</field-validator>

stringlength:字符串长度校验器
<field-validator type="stringlength">
 <param name="maxLength">10</param>
 <param name="minLength">2</param>
 <param name="trim">true</param>
 <message><![CDATA[产品名称应在2-10个字符之间]]></message>
</field-validator>

email:邮件地址校验器
<field-validator type="email">
 <message>电子邮件地址无效</message>
</field-validator>

regex:正则表达式校验器
<field-validator type="regex">
     <param name="expression"><![CDATA[^1[358]\d{9}$]]></param>
     <message>手机号格式不正确!</message>
</field-validator>

int:整数校验器
<field-validator type="int">
 <param name="min">1</param>
 <param name="max">150</param>
 <message>年龄必须在1-150之间</message>
</field-validator>

字段OGNL表达式校验器
<field name="imagefile">
 <field-validator type="fieldexpression">
  <param name="expression"><![CDATA[imagefile.length() <= 0]]></param>
  <message>文件不能为空</message>
 </field-validator>
</field>

http://blog.163.com/taodengwen@126/blog/static/87199341201282531133155/

http://blog.sina.com.cn/s/blog_705b5fbb01012v84.html

http://developer.51cto.com/art/201103/251944.htm



BootstrapValidator超详细教程

废话不多说,直接开始~一、引入必要文件下载地址:(https://github.com/nghuuphuoc/bootstrapvalidator/archive/v0.4.5.zip)...
  • u013938465
  • u013938465
  • 2016年12月07日 15:50
  • 58227

数据验证之类型与格式

    我一向给予用户最大的自由和最严格的限制。这两点并不矛盾,对于用户的输入,能不做限制的地方尽量不做限制,但是一旦做出限制,就要进行严格的验证。比如在允许用户输入字符的地方,我会允许用户输入任何字...
  • netops
  • netops
  • 2005年07月15日 16:05
  • 1017

javaScript 通用数据类型校验

/* * 取得字符串的字节长度 */ function strlen(str) { var i; var...
  • ly1577592799
  • ly1577592799
  • 2015年02月02日 15:20
  • 941

easyui正则验证各种数据格式

$.extend($.fn.validatebox.defaults.rules, {              idcard: {// 验证身份证                 validat...
  • xfl4629712
  • xfl4629712
  • 2017年05月15日 15:09
  • 550

JSR-303 定义的校验类型

空检查: @Null 验证对象是否为null @NotNull 验证对象是否不为null, 无法查检长度为0的字符串 @NotBlank 检查约束字符串是不是Null还有被Tr...
  • wengengeng
  • wengengeng
  • 2016年10月20日 15:47
  • 744

JAVA字段校验(validation)

在开发业务时,不可避免的需要处理一些校验, 如果是写if-else这种代码去校验, 那会有一大段这样的代码。不过还好有个校验插件:javax.validation.validation-api,不过...
  • Mr_rain
  • Mr_rain
  • 2017年10月16日 11:24
  • 759

字段验证

为了自我学习和交流PHP(jQuery,Linux,lamp,shell,JavaScript,服务器)等一系列的知识,希望光临本博客的人可以进来交流。寻求共同发展。搭建平台。本人博客也有许多的技术文...
  • yafei450225664
  • yafei450225664
  • 2017年02月17日 13:16
  • 258

struts2 字段、非字段验证,自定义验证

字段验证:  判断某个字段属性的输入是否有效    非字段验证:  不只针对某个字段,而是针对多个字段的输入值之间的逻辑关系进行校验。 index.jsp In...
  • kulefeng
  • kulefeng
  • 2017年02月13日 18:49
  • 403

常见的数据校验方法

常见的数据校验方法   1.      校验是什么 校验,是为保护数据的完整性,用一种指定的算法对原始数据计算出的一个校验值。当接收方用同样的算法再算一次校验值,如果两次校验值一样,表示数据完整。  ...
  • ky_heart
  • ky_heart
  • 2016年11月05日 23:12
  • 8315

Java编程规范

本文引用阿里Java开发手册。 GitHub阅读地址:Java编程规范 目录 编程规约  - 命名规约  - 常量定义  - 格式规范  - OOP规约  - 集合处理  - 并发处理  - 控...
  • L_B_H_w
  • L_B_H_w
  • 2017年02月13日 22:33
  • 2835
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据校验的几种方式
举报原因:
原因补充:

(最多只允许输入30个字)