数据校验的几种方式

转载 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



相关文章推荐

常见的数据校验方法

常见的数据校验方法   1.      校验是什么 校验,是为保护数据的完整性,用一种指定的算法对原始数据计算出的一个校验值。当接收方用同样的算法再算一次校验值,如果两次校验值一样,表示数据完整。  ...

sql server 数据校验功能 checksum 、 DBCC CHECKDB

页面 checksum 是SQL2005的功能,提供了一种比残缺页检测强大的机制检测IO方面的损坏。以下是详细描述: 页面 CHECKSUM: 在数据库页面从被写入磁盘到被SQL Server读取...

字段验证

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

几种常用的数据校验方式

我们知道数据在传输过程中,可能会存在数据出错的情况。为了保证数据传输的正确性,因此会采取一些方法来判断数据是否正确,或者在数据出错的时候及时发现进行改正。常用的几种数据校验方式有奇偶校验、CRC校验、...

Java使用反射和注解实现参数校验

使用场景: 保存对象之前都要进行参数校验,例如非空校验,长度校验等,一个个字段来校验的话非常繁琐,使用注解可以灵活的进行参数校验。 直接上代码了 /** * 用于校验前端传输的...

使用java反射机制对类字段进行选择性校验示例

这是一个使用java反射机制对类字段进行校验的工具,在工厂类中定义map存储需要校验的类类型和该类中需要校验的字段,在校验类中使用反射获取相关类的字段并进行校验,多用于接口开发时对字段的校验。 1、定...

利用反射打造自定义注解,自动校验或处理数据

开发过程中,难免会对数据进行校验或处理,难道每次都对不同的实体类的属性挨个判断是否符合规范或者对其进行特殊处理,程序员不应该这么做。在这个时候,自定义注解就派上大用场了。比如自定义一个 @Email ...

深入理解类的加载机制及反射

转自深入理解Java:类的加载机制与反射,保存在此以学习。 一、Java类加载机制 1.概述        Class文件由类装载器装载后,在JVM中将形成一份描述Class结构...

数据验证【web前端,表单】

数据验证最近做后台比较多,路七八糟的数据验证,弄得不厌其烦。SO,弄了个表单验证的玩意出来,达到快速,简介,不烦人的验证。下面看看,几种方式的数据验证,有什么不同。

js正则表达式,限1-2位整数,或者至多含有两位小数

$(function(){ //1、只能输入数字或者小数点 仅整数,整数加小数 var reg1=/(^[0-9]{1,2}$)|(^[0-9]{1,2}[\.]{1}[0-9]{1...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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