struts2验证框架之三验证消息

17 篇文章 0 订阅

本地化和参数化消息


每个Validator or Field-Validator 元素必须有一个message元素,并且message元素有一个参数--key,但是不是必须的.message元素的body中定义的就是默认的消息,如果,验证失败,就会添加到Action中.这个Key 就是国际化的时候,资源文件的key,struts2会调用TextProvider(原文这里是LocaleAware )这个接口的getText()方法来查找相应的key,因此我们的action 必须得实现TextProvider接口(原文这里是LocaleAware ,但是我看了一下源代码,应该是TextProvider接口,望各位指正),这里多说一句,要使用验证框架,我们的action必须实现ValidationAware接口,为了方便,Struts2已经提供了一个实现了上述接口的类--- ActionSupport,因此我们的Actoin只需要继承这个类就行了.这就使得我们可以本地化我们的提示信息,这个是根据我们提供的Locale 实例来进行的,不管我们提供的是何种Locale(LocaleProvider 接口提供了getLocale()方法).不管我们是用key来查找资源文件还是提供默认消息,当验证器获得消息之后,将会被压入ValueStack 栈,然后,在消息中${...}块将会被替换为${ 和 }的字符串计算出来的值,这就可以使我们来使用参数来多样化我们的消息,我们既可以用Validator中的值,也可以使用Action中的值.

注意:如果我们使用xml文件来定义验证规则的话,我们必须要避免特殊字符.例如:在表达式验证器中,我们需要使用>而不是直接使用>,如果需要知道完整的特殊字符,我们可以查阅相关的资料.

主要有以下几种:

&lt;<小于号
&gt;>大于号
&amp;&
&apos;'单引号
&quot;"双引号

当然我们也可以将消息放置在CDATA块中: <![CDATA[ " and ends with " ]]>

如:<message><![CDATA[ must be the same as the Required Validator Field if specified ]]></message>


 

下面是一个参数化消息的例子:

该例子中使用了IntRangeFieldValidator的最大值与最小值和Action中的bar 值.

bar must be between ${min} and ${max}, current value is ${bar}.

另一个值得注意的是,我们可以在message中使用ognl 表达式.记住这一点儿,可以使我们写出很复杂的消息哦.

看下面的例子:

<message>${getText("validation.failednotice")}! ${getText("reason")}: ${getText("validation.inputrequired")}</message>
构造一个map输出:
<message>${#{"aa":"aaa","bb","cc"}}</message>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值