`
kongweile
  • 浏览: 507685 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

struts2输入校验

阅读更多

输入校验是基于类型转换的,也就是说发生了类型转换才会有输入校验.而当类型转换后(无论成功或失败),输入校验都一定会执行..如果类型转换成功,则数据为用户输入的值,如果失败,int为被赋为0,String,Date等复合类型会被赋为null.然后就开始执行我们的输入校验了.struts2的输入校验大致可以分为3类,输入校验是有顺序的.

struts2的输入校验大致可以分为3类(按照他们被执行的顺序排列):

第一类-建立properties文件.

struts2的标签库里内置了输入校验的错误提示功能.当你的字段,如<s:textfield name="point"label="Point"></s:textfield>类型转换失败后,将相应的字段赋值为0或者null,且当返回当前页面时,会在point textfield上自动加上Invalid field value for field "point".里面的"point"是对应textfield里的name,其实它就是调用了addFieldError方法.

其实struts2已经内置了.不过显示信息太不友好了.建议要覆盖掉,而覆盖的方法就是建立properties文件.

这种方法用来检查当我们在textfield中填入了任何信息(纯空格也算)时,进行类型转换是否成功,如果失败的话就会addFieldError.当我们转换失败并返回当前页面时就能看到错误提示.但是如果我们什么都不填,int会被赋0,复合类型会被赋null,但不会addFieldError,这里我不太明白为什么会这样.希望有高手能告诉我一下噢.呵呵.
这种方法又分为全局和局部两种,全局是针对整个项目的.而局部是针对某个action的.如果建立了全局的.然后针对某个action建立一个局部的.在局部properties里的属性会覆盖全局的.而如果action里的某些属性没有在局部里被定义.则那些属性会调用全局的.

先说全局:
我们要在struts.xml中的<struts>标签中加入<constant name="struts.custom.i18n.resources" value="xxx"></constant> name中的值是固定的.而value可以随便改.如果value为"message",则我们要在src下建立message.properties文件.xwork.default.invalid.fieldvalue={0} error,{0} error代表当整个项目中某属性发生错误时,会在相应控件上addFieldError("属性名","属性名 error").有时候不是那么好用.

然后是局部:
局部的是针对某一个action的.在想覆盖内置输入校验,需要在对应action的目录下建立"action名.properties"文件,在该文件中加入“invalid.fieldvalue.属性名=对错误的描述”.

第二类-利用struts2的校验框架建立xml文件.

struts2提供了很强大的校验框架.而这种框架是针对某一个action的.我们要在对应的action目录下建立"action名-validation.xml"的文件.它一般的格式为:
<?xml version="1.0" encoding="UTF-8"?>
<!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="date">
  <field-validator type="date" short-circuit="true">
   <param name="max">2010-3-2</param>
   <param name="min">1990-2-21</param>
   <message>The date must between 2010-3-2 and 1990-2-21</message>
  </field-validator>
  <field-validator type="required">
   <message>RegisterAction-validation:date can't be blank!</message>
  </field-validator>
 </field>
 
</validators>

前3行是固定的.validators标签也是固定的.只是validators里面又分为字段校验与非字段校验,他们其实只是处理方法不同.或者说是看问题的角度不同.其中字段校验比较容易简单实用,所以提倡大家都用字段校验的.
name代表你要校验的字段.
type代表用什么类型的校验器.
short-circuit代表短路的意思.就是说当前的field-validator如果不符合,也就是说message被addFieldError了.那么当前字段接下来的校验器都不会被执行.例如当我们输入了2012-2-21,这里的date校验器就会校验出.这个数据是不符合的.message被addFieldError了.那么下面的required校验器就不会被执行了.

至于到底有什么type的校验器.我们可以自己去xwork-core-2.1.6.jar~com.opensymphony.xwork2.validator.validators里的default.xml里查询.里面有校验器对应使用的类.

而对于param标签.对每个校验器有什么param可以在校验器里面的类里查.首先要checkout源代码下来(⊙o⊙)哦.

然后message就是说当不符合时被addFieldError的信息.

其实当我们在struts.xml里指定了action的name和calss.如<action name="register" class="com.test.action.RegisterAction" method="test">,struts2会在RegisterAction.java目录下自动寻找RegisterAction-register-validation.xml文件并进行校验.

第三类-action里的validate方法和validatexxx方法.

当我们在struts.xml中指定了action的method,如上面的.
校验首先会从validateTest开始.当执行完后再执行validate.
action大多都是继承ActionSupport,继承的validate是do nothing的.需要我们自己去实现.而类似validateTest这样的我们自己指定的校验和继承得来的validate是一样的(除了名字...)所以是执行了validateTest后执行validate.

ok...写完了.多少有些啰嗦.也不知道是不是真的正确哦.请大家指出!呵呵

最后总结下struts2输入校验的顺序:

全局和局部的properties->struts2的校验框架->validate方法.

properties觉得在输入校验中没多大用处.而如果我们的校验不需要太复杂的话,尽量使用框架.它功能也很强大了.当我们校验太复杂时,我们可以自己编写validate方法!!!

最近才学struts2.希望大家谅解我噢.

分享到:
评论

相关推荐

    Struts2输入校验总结

    Struts2输入校验总结 Struts2输入校验

    Struts 2 输入校验

    Struts 2 输入校验

    Struts2 输入校验

    本人写的struts2 输入校验的小程序,希望大家踊跃下载。 本人写的struts2 输入校验的小程序,希望大家踊跃下载。 本人写的struts2 输入校验的小程序,希望大家踊跃下载。

    struts2输入校验总结

    struts2输入校验总结,struts2自带的校验器,以及校验器不能做的check的处理的总结

    Struts2输入校验

    要求使用Struts2的内建校验器校验“书名”、“作者”、“出版日期”、“价格”和“库存数量”字段;要求手动编写代码校验“书号”的有效性;要求手动编写代码校验“出版社”字段中是否包含了“出版社”三个字。

    struts2输入校验深入总结

    NULL 博文链接:https://fangguanhong.iteye.com/blog/1779291

    Struts2的输入校验

    Struts2输入校验,Struts2提供了功能强大的输入校验机制,通过Struts2内建的输入校验器,应用无需书写任何代码,即可完成大部分的校验功能,并可以同时完成客户端和服务器端的校验。

    struts2的输入校验

    struts2的输入校验有两种方式: 一.重写validate()方式 二.采用配置文件的方式 先我们就以一个简单的登录的例子来讲解这个吧. 重点讲解下,第二个采用配置文件的方式: 1.添加一个xml的校验文件,保存在...

    Struts2数据校验与国际化

    Struts2数据校验与国际化,有validate()方法校验,有validateXxx()方法校验,有配置文件校验;国际化:有英,香港,内地

    [原]Struts2输入校验

    NULL 博文链接:https://wintys.iteye.com/blog/481620

    使用struts2进行输入校验

    使用struts2进行输入校验入门 (附图)

    Struts2全解Struts2全解

    1、struts2概述 ...6 struts2输入校验 ......... 7 struts2 OGNL(对象图形化导航语言) ........ 8 struts2拦截器 ......... 9 struts2类型转换 ........ 10struts2标签库 ........ 11、访问数据库 ........

    struts2讲义_吴峻申

    8.2.3 Struts2输入校验出错信息的国际化配置形式 163 8.3 集合类型输入校验介绍 165 8.3.1 Struts2中单个Java对象的输入校验形式 166 8.3.2 Struts2对象集合即批量输入的校验形式 169 8.4 Struts2输入校验器大全 171...

    Struts2 用户输入校验教程

    基于Struts2框架的用户输入校验的完整讲解!是我的原创! 非常感谢大家提出宝贵意见

Global site tag (gtag.js) - Google Analytics