Struts2中的多个验证方法的共存细节一
在Struts2中默认的,使用validateAbc()作为abc()的验证方法
所以,如果还存在xyz()方法的话,那么它的验证方法就是validateXyz()方法
执行时,首先执行validateAbc()方法
而无论validateAbc()方法执行后的结果如何,都会去执行validate()方法
也就是说,如果一个Action中提供validate()方法的话,那么它是一定会被执行的
执行完validate()之后,如果没有发现存在Field或者Action级别的ERROR的话
那么才会执行相应的业务逻辑的方法,如abc()方法
Struts2中的多个验证方法的共存细节二
很显然这种机制不是很合理。因为不同的业务逻辑存在着不同的验证方式
如果不同的验证方式验证完之后,还要去验证一下validate()的话,显然这是不合理的
这种情况下有两种解决的策略
1..不再复写validate()方法,由于父类的validate()方法的方法体是空的
尽管它也会被调用,但是它什么也不会做,不会对我们的程序造成任何影响
2..重命名validate()方法,即命名为validateExecute()
所以本例若需执行execute()的话,则可通过validateExecute()验证表单
提示Struts2的默认错误信息
如果int或long发生类型转换错误的话,Struts2会将该属性值自动设为零
如果String发生类型转换错误的话,它会将该属性值自动设为null
但若前台页面输入的age是字符串的话,那么它是无法转换成int型的
这时在前台页面就会提示Invalid field value for field "age".信息
在这个错误提示信息中的age对应的是前台页面中<input name="">为age的值
这是因为Struts2在遇到类型转换错误的时候,也就是说无法进行类型转换的时候
struts2框架会自动生成一条错误信息,并将该错误信息放到addFieldError()中
然后就可以通过全局或局部的国际化资源转换文件来自定义更为人性化的错误提示信息
然后就可以在前台使用<s:fielderror/>标签输出资源文件中自定义的错误提示信息
另外,在Struts1.x中若想在页面中提示关于表单填写的信息,则要增加<html:errors/>标签
全局的国际化资源转换文件自定义Struts2提示的错误信息
类型转换出现错误时Struts2中的conversionError拦截器负责将错误封装成表单错误中的Fielderror
在xwork-2.0.4.jar中的com.opensymphony.xwork2包里面有一个xwork-messages.properties文件
将它里面的xwork.default.invalid.fieldvalue属性在资源文件中覆盖就可以输出人性化的信息了
在struts.xml中配置了message.properties之后,就可以建立该文件了
建好后输入xwork.default.invalid.fieldvalue={0}error
由于是进行资源转换,所以xwork.default.invalid.fieldvalue写法是固定的
而{0}则对应前台页面中<inputname="">里面的name值
比如在age输入域中输入字符串之后,就会提示ageerror
如果在birthday输入域中输入字符串的话,同样会提示birthdayerror
局部的国际化资源转换文件
全局的资源文件有些时候并不是特别好用,因为它显示的效果过于单一枯板
而Struts2也已经认识到了这一点,因此它又给我们提供了使用局部的资源文件的方式
局部的国际化资源转换文件也是在项目开发中使用的最多的
虽然它显得比较麻烦,但是它能够为用户提供一种更友好的视图表现方式
局部的资源文件必须与它所要验证的类在同一个目录下,并且要与类同名
比如验证RegisterAction的某些属性,那么它必须与RegisterAction位于同一目录下
并且的它名字也必须是RegisterAction.properties,然后编辑它的内容
比如相对于age属性来说invalid.fieldvalue.age=ageconversionerror
其中invalid.fieldvalue.是固定的,后面跟RegisterAction类中的属性
所以这句话的意思就是:当age发生类型转换错误时,则显示age conversion error信息
并且局部的先级要高于全局的国际化资源转换文件,所以将优先显示局部资源文件中的提示信息
下面是示例工程,这是一个Struts2.0.11应用
首先是web.xml文件
然后是用于提供表单输入的validateInput.jsp页面
当表单输入域均正确时显示的validateSuccess.jsp页面
然后是struts.xml文件
用到的核心验证逻辑的ValidateInputAction.java
用到的局部的国际化资源转换文件ValidateInputAction.properties
用到的全局的国际化资源转换文件message.properties
分享到:
相关推荐
Struts2输入校验总结 Struts2输入校验
struts2的输入校验有两种方式: 一.重写validate()方式 二.采用配置文件的方式 先我们就以一个简单的登录的例子来讲解这个吧. 重点讲解下,第二个采用配置文件的方式: 1.添加一个xml的校验文件,保存在...
Struts2输入校验,Struts2提供了功能强大的输入校验机制,通过Struts2内建的输入校验器,应用无需书写任何代码,即可完成大部分的校验功能,并可以同时完成客户端和服务器端的校验。
使用struts2进行输入校验入门 (附图)
struts2输入校验 对指定方法进行输入校验
struts2输入校验总结,struts2自带的校验器,以及校验器不能做的check的处理的总结
基于Struts2框架的用户输入校验的完整讲解!是我的原创! 非常感谢大家提出宝贵意见
java,struts2的输入校验总结大全
Struts 2 输入校验
本人写的struts2 输入校验的小程序,希望大家踊跃下载。 本人写的struts2 输入校验的小程序,希望大家踊跃下载。 本人写的struts2 输入校验的小程序,希望大家踊跃下载。
实验目的: 熟悉和掌握Struts2自定义类型转换。 熟悉和掌握Struts2内建校验的操作方法 ...(2) 根据实验四的图书管理系统,扩展图书新增功能,要求对新增页面表单中的每个文件输入框进行输入校验
重写validate方法校验将会产生两种错误信息:Field级别错误信息,Action级别的错误信息 Field级别错误信息就是将错误信息添加到fieldErrors,也就是将错误信息添加到addFieldError方法中。 Action级别的错误信息...
浪曦_Struts2应用开发系列_第5讲.Struts2的输入校验
要求使用Struts2的内建校验器校验“书名”、“作者”、“出版日期”、“价格”和“库存数量”字段;要求手动编写代码校验“书号”的有效性;要求手动编写代码校验“出版社”字段中是否包含了“出版社”三个字。
NULL 博文链接:https://fangguanhong.iteye.com/blog/1779291
Struts2数据校验与国际化,有validate()方法校验,有validateXxx()方法校验,有配置文件校验;国际化:有英,香港,内地