Struts2中的输入校验

完整版见https://jadyer.github.io/




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的默认错误信息
如果intlong发生类型转换错误的话,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}则对应前台页面中<input name="">里面的name值
比如在age输入域中输入字符串之后,就会提示age error
如果在birthday输入域中输入字符串的话,同样会提示birthday error


局部的国际化资源转换文件
全局的资源文件有些时候并不是特别好用,因为它显示的效果过于单一枯板
而Struts2也已经认识到了这一点,因此它又给我们提供了使用局部的资源文件的方式
局部的国际化资源转换文件也是在项目开发中使用的最多的
虽然它显得比较麻烦,但是它能够为用户提供一种更友好的视图表现方式
局部的资源文件必须与它所要验证的类在同一个目录下,并且要与类同名
比如验证RegisterAction的某些属性,那么它必须与RegisterAction位于同一目录下
并且的它名字也必须是RegisterAction.properties,然后编辑它的内容
比如相对于age属性来说invalid.fieldvalue.age = age conversion error
其中invalid.fieldvalue.是固定的后面跟RegisterAction类中的属性
所以这句话的意思就是:当age发生类型转换错误时,则显示age conversion error信息
并且局部的先级要高于全局的国际化资源转换文件,所以将优先显示局部资源文件中的提示信息



 

下面是示例工程,这是一个Struts2.0.11应用

首先是web.xml文件

然后是用于提供表单输入的validateInput.jsp页面

当表单输入域均正确时显示的validateSuccess.jsp页面

然后是struts.xml文件

用到的核心验证逻辑的ValidateInputAction.java

用到的局部的国际化资源转换文件ValidateInputAction.properties

用到的全局的国际化资源转换文件message.properties

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值