Struts2.x 学习笔记 之 错误消息提示和定制

表现层数据涉及的两个处理:数据校验和类型转换。
(1)简介:
  struts2 提供了一个名为convertsionError的拦截器,这个拦截器被注册在默认的拦截器栈中,查看struts2框架的默认配置文件struts-default.xml

图1

如果Struts2的类型转换器还行类型转换时出现错误,该拦截器将负责将对应错误封装成表单域错误(FiledError),并将这些错误信息放入ActionContext中


(2)出现的异常
  当conversionError拦截器对转换异常进行处理后,系统会跳转到名为input的逻辑视图
  若无会出现以下异常提示:

图3

(3)需要继承ActionSupport
  为了让struts2类型转换的错误处理机制生效,以及输入校验生效,都必须让Action继承Struts2的ActionSupport基类,因为strut2的ActionSupport负责收集类型转换错误、输入校验错误、并将它们封装成FieldError对象,添加到ActionContext中

图4

(4)修改提示信息
显示中文信息,在国际化资源文件中增加下面一行代码
xwork.default.invalid.fieldvalue={0}字段类型转换失败!
上面的资源文件中包含了非西欧字符,因此必须使用native2ascii命令来处理该文件
覆盖错误信息。

图5
图6

如果是 simple 主题, 还会自动显示错误消息吗? 如果不会显示, 怎么办 ?
1). 通过 debug 标签, 可知若转换出错, 则在值栈的 Action(实现了 ValidationAware 接口) 对象中有一个  fieldErrors 属性.
该属性的类型为 Map<String, List<String>> 键: 字段(属性名), 值: 错误消息组成的 List. 所以可以使用 LE 或 OGNL 的方式
来显示错误消息: ${fieldErrors.age[0]}

2). 还可以使用 s:fielderror 标签来显示. 可以通过 fieldName 属性显示指定字段的错误.

问题3. 若是 simple 主题, 且使用  <s:fielderror fieldName="age"></s:fielderror> 来显示错误消息, 则该消息在一个 
ul, li, span 中. 如何去除 ul, li, span 呢 ?
在 template.simple 下面的 fielderror.ftl 定义了 simple 主题下, s:fielderror 标签显示错误消息的样式. 所以修改该
配置文件即可. 在 src 下新建  template.simple 包, 新建 fielderror.ftl 文件, 把原生的 fielderror.ftl 中的内容
复制到新建的 fielderror.ftl 中, 然后剔除 ul, li, span 部分即可. 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值