数据校验的几种方式

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



Struts2:对Action中方法进行输入校验

在struts2中,我们可以实现对action的所有方法进行校验或对action的指定方法进行校验。对于输入校验,struts2提供了两种实现方法: 1.采用手工编写代码实现 2.基于XML配置方...

comboBox 加载数据的几种方式

  • 2016年07月26日 16:48
  • 667B
  • 下载

IOS数据持久化的几种方式

  • 2017年02月08日 15:32
  • 123KB
  • 下载

FreeMarker几种不同方式的展现数据

FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具。 本文主要写了3种方法通过freemarker与java对象数据结合,将数据展现于前台页面。 注:项目jar包 commons...

Hive几种数据导入方式

  • 2016年02月26日 14:36
  • 637KB
  • 下载

Spark Streaming kafka 实现数据零丢失的几种方式

Definitions问题开始之前先解释下流处理中的一些概念: At most once - 每条数据最多被处理一次(0次或1次) At least once - 每条数据最少被处理一次 (1次或更多...
  • lsshlsw
  • lsshlsw
  • 2016年04月12日 14:31
  • 3844

Cocos2d demo 数据存储的几种方式

  • 2015年03月02日 11:22
  • 1.88MB
  • 下载

asp.net MVC前台View页面向后台Controller控制器传递数据的几种方式

上一篇文章讲解了后台控制器如何向前台页面传递数据,今天就接着为大家讲解前台View页面向后台Controller控制器传递数据的几种方式。在此声明,这几种方式是我在实际使用过程中遇到并总结的,如果那个...

【Android 开发】 : Activity之间传递数据的几种方式

在Android开发中,我们通常需要在不同的Activity之间传递数据,下面我们就来总结一下在Activity之间数据传递的几种方式。 1. 使用Intent来传递数据 Intent表示意图,很多...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据校验的几种方式
举报原因:
原因补充:

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