struts2学习(6) ValidationAware

从一个HTMl到一个Action对象,类型转化你是从字符串到非字符串。

首先,HTTP没有“类型” 的概念,每一项表单的输入值可能是从一个字符串或一个字符串数组,在server端,必须把String转换成特定的数据类型。

struts2中,把请求参数映射到action属性的工作由Parameters拦截器负责,它是默认的defaultStack拦截器中的一份子,Parameters拦截器可以自动完成字符串和基本数据类型之间的转换。

类型的转换错误

  • 若Action类没有实现ValidationAware接口:struts在遇到类型转换错误时,仍然会调用Action方法,仿佛什么都没有发生。
  • 若action类实现了ValidationAware接口: struts在遇到类型转换错误时将不会继续调用其Action方法;struts将检查相关action元素的声明是否包含一个name=input的result。如果有,struts将把控制权交给result元素;如果没有input结果,struts将抛出一个异常。
继承ActionSupport来间接实现ValidationAware接口
public class ActionSupport implements Action, Validateable, ValidationAware, TextProvider, LocaleProvider, Serializable

下面看一个例子
此时还没有继承ActionSupport类

两个输入结果分别是


可以看到确实执行了Action方法;再看一下继承了ActionSupport的Action类



下面给Aciton配置一个result标签


再看一下执行结果


可以看到返回了一个错误提示;那么这个错误提示可以被覆盖吗?那就要用到ConversionError拦截器;其负责添加与类型转换错误有关的错误信息(前提,Action实现了ValidationAware接口),而且还能保存各请求参数的原始值。

覆盖默认的错误消息

  • 在对应的Action类所在的保重新建ActionClassName.properties文件,ActionClassName为输入字段的Action类的类名
  • 在属性文件中添加如下键值对:invalid.fieldvalue.fieldName=xxx

再看一下执行结果

若字段标签使用的不是Simple主题,责非法输入字段将导致不提示错误消息,那就需要手动去添加错误消息
使用s:debug查看栈顶属性


看到值栈里有fieldErrors属性里面存放了我们的错误信息,该属性为Map<String,List<String>>类型,可以通过EL或者OGNL方式来显示错误信息

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值