Struts2 数据输入校验(1) —— 函数验证
2011-04-28 15:22
513 查看
http://www.blogjava.net/bacon/archive/2009/02/01/252888.html
用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.字段名=错误信息
用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.字段名=错误信息
相关文章推荐
- 使用Struts2验证框架实现输入校验
- Struts2数据输入验证教程详解
- struts2:数据校验,通过Action中的validate()方法实现校验(续:多业务方法时的不同验证处理)
- Struts2的数据输入校验
- Struts2中的数据校验(二[验证框架校验]) .
- Struts2自定义类型转换器、自定义拦截器和用户输入数据的验证
- Spring框架整合Struts2使用Validation框架验证表单用户输入数据的详细教程
- 使用Struts2验证框架实现输入校验
- struts2使用validate方法来实现对表单输入数据的校验操作
- java_struts2手工编写代码实现对Action中的输入数据校验
- Struts2自定义类型转换器、自定义拦截器和用户输入数据的验证
- Struts2(七)基于XML方式进行数据输入校验
- Struts2输入校验(二)----验证框架
- struts2基于验证框架的输入校验
- Struts2 Chater 4&5 Struts2中的验证输入和数据类型的转换
- 关于Struts2基于验证框架的输入校验的经验
- 7 Struts2输入校验(二)----验证框架
- Spring框架整合Struts2使用Validation框架验证表单用户输入数据的详细教程
- EXCEL规范数据输入教程-验证身份证号
- Struts2输入检验(一)使用Annotation验证