快速业务通道

Struts2数据输入校验(1) —— 函数验证 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16

Struts2数据输入校验(1) —— 函数验证

时间:2011-07-22 BlogJava bacon

用struts2标签库来实现上述目的的基本原理:

错误消息分为field级和action级,都在ActionSupport类中预定义了,不同的是,

fieldError是通过一个Map来实现,事实上记录了field的名字和错误信息,因此能在页面上对应的 field中显示;

而actionError是通过一个Collection实现,没有记录报错的来源,只记录了错误信息。

注意,下面是简要流程:

(1)页面提交到action之后,首先struts会尝试对输入的字符串信息根据Action中定义的属性类型进行 类型匹配及转换,如果输入为空,它会将内容置为该类型的缺省值(0、0.0、空字符串等等),对于数据 格式不匹配的情况,比如说在age栏里面输入字母等等,struts会自动提示默认的错误,并返回input,这 一工作是struts2自动完成的。

(2)然后,验证机制生效,调用validate()函数和XML验证框架中的验证逻辑(《Struts2 数据输入校 验(2) —— XML验证 》会提到),检查的同时会因为验证错误调用了addFieldError()和 addActionError()。页面提交之前,struts会调用ActionSupport(严格说是ValidationAware接口)的 hasErrors()方法,该方法很简单,就是检查fieldError的Map和actionError的Collection是否为空,如 果均为空,则调用execute()方法[*]进行业务逻辑的调度,否则返回error。

(3)最后,程序会根据返回信息执行forward操作,struts.xml中则定义了这些返回值所对应的跳转逻 辑。

如果有错误返回,错误信息会在页面上提示

在Action中所有addFieldError()设置的信息将在对应的field位置显示;

在Action中所有addActionError()设置的信息将不会显示,除非在页面中定义了s:actionerror控件, 那么错误将以ul的格式显示。

对多验证和跳转逻辑的支持

对于一些Action如果需要重用,struts也提供了支持。

上述[*]处,你也可以指定其它任意的名字,这需要在struts.xml中修改对应action的method属性

<action name="XXXAction" class="com.myspace.myname.XXXAction" 

method="newExcuteName">      

<result>success.jsp</result></action>

同时在XXXAction中我们需要定义一个方法

public String newExcuteName(){ /*dummy code*/ }

如果同时还定义了

public void validateNewExcuteName(){ /* dummy code */ }

那么在执行validate()之前,程序会先执行validateNewExcuteName()方法

可以考虑把所有公用的验证逻辑放到validate()方法中

上述过程完全是靠java反射机制实现的,效率会低一些,所以除非真有必要,否则不用。

错误提示字符串的本地化

在validator方法中直接写错误信息固然方便,但不算是一个好习惯,同时也不能支持本地化。下面简 单说明本地化的两种方式

1、全局国际化默认的错误提示,首先在struts.xml中加入常量

<struts> <constant name="struts.custom.i18n.resources" value="message"></constant> </struts>

然后在与struts.xml同级的位置建立message.properties中写入

xwork.default.invalid.fieldvalue={0} error

2、针对某个Action的验证错误提示

在与XXXAction同级目录下建立与该Action同名的属性文件

XXXAction.properties中写入

invalid.fieldvalue.字段名=错误信息

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号