国际化提示信息

在上面的数据校验中,所有的提示信息都是通过硬编码的方式写在配置文件中的,这种方式显然不利于程序国际化。

当查看每个校验文件时,发现每个<field-validator .../>元素都包含了一个必填的<message .../>子元素,这个子元素中的内容就是校验失败后的提示信息。为了国际化该提示信息,为message元素指定key属性,该key属性指定是国际化提示信息对应的key

例如,我们将前面的birth字段的校验规则改为如下配置。

程序清单:codes\04\4.2\I18NValidate\WEB-INF\src\org\crazyit\app\action\RegistAction-validation.xml

<?xml version="1.0" encoding="GBK"?>

<!-- 指定校验配置文件的DTD信息 -->

<!DOCTYPE validators PUBLIC

     "-//OpenSymphony Group//XWork Validator 1.0.3 //EN"

     "http://www.opensymphony.com/xwork/xwork-validator- 1.0.3 .dtd">

<!-- 校验文件的根元素 -->

<validators>

     <!-- 校验Actionname属性 -->

     <field name="name">

          <!-- 指定name属性必须满足必填规则 -->

          <field-validator type="requiredstring">

               <param name="trim">true</param>

               <message key="name.requried"/>

          </field-validator>

          <!-- 指定name属性必须匹配正则表达式 -->

          <field-validator type="regex">

               <param name="expression"><![CDATA[(\w{4,25})]]></param>

               <message key="name.regex"/>

          </field-validator>

     </field>

     <!-- 校验Actionpass属性 -->

     <field name="pass">

          <!-- 指定pass属性必须满足必填规则 -->

          <field-validator type="requiredstring">

               <param name="trim">true</param>

               <message key="pass.requried"/>

          </field-validator>

          <!-- 指定pass属性必须满足匹配指定的正则表达式 -->

          <field-validator type="regex">

               <param name="expression"><![CDATA[(\w{4,25})]]></param>

               <message key="pass.regex"/>

          </field-validator>

     </field>

     <!-- 指定age属性必须在指定范围内-->

     <field name="age">

          <field-validator type="int">

               <param name="min">1</param>

               <param name="max">150</param>

               <message key="age.range"/>

          </field-validator>

     </field>

     <!-- 指定birth属性必须在指定范围内-->

     <field name="birth">

          <field-validator type="date">

               <!-- 下面指定日期字符串时,必须使用本Locale的日期格式 -->

               <param name="min"> 1900-01-01 </param>

               <param name="max"> 2050-02-21 </param>

               <message key="birth.range"/>

          </field-validator>

     </field>

</validators>

上面的粗体字代码并未直接给出message的内容,而是指定了一个key属性,表明当birth字段违反该校验规则时,对应的提示信息是keybirth.range的国际化消息。

本应用的校验文件中指定了许多国际化信息的key,所以必须在国际化资源文件中增加对应的key,即在国际化资源文件中增加如下Entry

程序清单:codes\04\4.2\I18NValidate\WEB-INF\src\mess.properties

#违反用户名必须输入的提示信息

name.requried=您必须输入用户名!

#违反用户名必须匹配正则表达式的提示信息

name.regex=您输入的用户名只能是字母和数字,且长度必须在425之间!

#违反密码必须输入的提示信息

pass.requried=您必须输入密码!

#违反密码必须匹配正则表达式的提示信息

pass.regex=您输入的密码只能是字母和数字,且长度必须在425之间!

#违反年龄必须在指定范围的提示信息

age.range=您的年龄必须在${min}${max}之间!

#违反生日必须在指定范围的提示信息

birth.range=您的生日必须在${min}${max}之间!

运行上面的程序,即可看到输入校验的提示信息变为国际化资源文件提供的消息,这就实现了错误提示消息的国际化。

 

你可能感兴趣的:(java,struts2,程序,配置文件)