Struts2 Field校验框架message元素key的使用方式

在xwork-validator-1.0.3.dtd文件中

<!ELEMENT validators (field|validator)+>

<!ELEMENT field (field-validator+)>
<!ATTLIST field
	name CDATA #REQUIRED
>

<!ELEMENT field-validator (param*, message)>
<!ATTLIST field-validator
	type CDATA #REQUIRED
    short-circuit (true|false) "false"
>

<!ELEMENT validator (param*, message)>
<!ATTLIST validator
	type CDATA #REQUIRED
    short-circuit (true|false) "false"
>

<!ELEMENT param (#PCDATA)>
<!ATTLIST param
    name CDATA #REQUIRED
>

<!ELEMENT message (#PCDATA|param)*>
<span style="color:#FF0000;"><!ATTLIST message
    key CDATA #IMPLIED
></span>
在学习笔记(六)中我们具体分析了各行语句代表的含义。这里面主要了解下<!ATTLIST message key CDATA #IMPLIED>message中key的使用方式。

key属性是为了国际化所需要的。当我们的校验框架出错时,那我们的提示应该根据不同国家的人群来显示相应语言的提示信息。而这种识别是根据浏览器的首选语言来决定的。

我们在包下建立package_en_US.properties和package_zh_CN.properties文件。这两个文件分别对应英文和中文的提示信息。

比如,我们在输入用户名是想提示

中文:用户名的长度在4和6之间

英文:username should be between 4 and 6

我这个是对RegisterAction类进行校验的,

在所以在RegisterAction-validation.xml文件下配置,message所对应的key值即可。

<field name="username"><!-- name属性值对应的是需要校验RegisterAction的变量名 -->
<field-validator type="stringlength"><!--字符长度校验 -->
<param name="minLength">4</param>
<param name="maxLength">6</param>
<span style="color:#FF0000;"><message key="username.invalid"></message></span>
</field-validator>
</field>

综上所述,我们将错误信息不直接放在message中,而是统一放在属性文件中,通过key值来查找对应的错误信息。

国际化的资源文件的命名规则:package_语言名_国家名,比如package_zh_CN,package_en_US;

Struts2是通过jdk提供的国际化支持来实现的。

JDK中的Local类

  Locale 对象表示了特定的地理、政治和文化地区。需要 Locale 来执行其任务的操作称为语言环境敏感的操作,它使用 Locale 为用户量身定制信息。

  我们可以通过如下方法获得所有国家和语言的简称。

         Locale[] locales = Locale.getAvailableLocales();
         for (Locale locale : locales) {
         System.out.println(locale.getDisplayCountry());
         System.out.println(locale.getDisplayLanguage());

java.util ResourceBundle类

这个类提供软件国际化的捷径。通过此类,可以使您所编写的程序:

         轻松地本地化或翻译成不同的语言
         一次处理多个语言环境
         以后可以轻松地进行修改,支持更多的语言环境
 
这个类的作用就是读取资源属性文件(properties),然后根据.properties文件的名称信息(本地化信息),匹配当前系统的国别语言信息(也可以程序指定),然后获取相应的properties文件的内容。资源文件的命名规则是:文件头_语言代号_国家代号.properties
 

当程序需要特定于语言环境的对象时,它使用 getBundle 方法加载 ResourceBundle 类:

 ResourceBundle myResources =
      ResourceBundle.getBundle("MyResources", currentLocale);
具体实例如下:

命名两个文件属性名如下:fannie_ch_ZN.properties/fannie_en_US.properties

文件内容如下:

name=\u5F20\u4E09          name=fannie

通过程序调用:

public static void main(String[] args) {
		ResourceBundle myResources =
			      ResourceBundle.getBundle("fannie");
		String value=myResources.getString("name");
		System.out.println(value);
		}
默认显示的是中文的 “张三”

如果要显示英文,设置如下:

ResourceBundle myResources =ResourceBundle.getBundle("sict",<span style="color:#FF0000;">Locale.US</span>);//调用Locale的静态方法,选择对应的语言
如果没有对应的属性文件,则实现默认语言的情况。





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值