国际化
一.国际化的目标
1. 如何配置国际化资源文件
1) Action 范围资源文件:在Action 类文件所在的路径建立
名为ActionName_language_country.properties的文件
2) 包范围资源文件: 在的根路径下建立文件
名为package_language_country.properties 的属性文件一旦建立,
处于该包下的所有 Action 都可以访问该资源文件,注意报范围资源文件的baseName就是package,
不是Action 的所在包名。
3) 全局资源文件
命名方式:basename_language_country.properties
struts.xml <constant name="struts.custom.i18n.resource" value="baseName"/>
struts.properties struts.custom.i18n.resources=baseName
注意:properties文件里的 key = ?? (key属性值 要和 表单中key 或对应转换的Key 的属性值要一致)
2.如何在页面上和Action类中访问国际化资源文件的value值
1)在Action 类中,若Action 实现了TestProvider接口,则可调用其getTest()方法获取value值
> 通过继承ActionSupport的方式
2)页面上使用 s:test 标签 对于表单标签可以使用表单标签的key属性值
>若有占位符,则使用 s:test 标签的s:param 子标签来补充
>可以利用标签和OGNL 表达式直接访问值栈中的属性值(对象栈和 Map栈)
3.实现通过超链切换语言。
1)关键之处在于知道struts2框架是怎样确定Local对象的
2)可通过阅读i18n拦截器
消息错误显示
<!--
问题1: 覆盖错误显示消息。
(1)在对应的action中创建一个文件名为actionclassname.properties文件。
(2) 加入下键值对:invalib.fieldvalue.fieldName=???
问题2:若是simpie主题
(1)通過debug标签,可知值栈的Action(实现ValidationAwar接口)
对象中一个属性fieldErrors,类型为Map<String,List<String>>,可用OGNL或LE表示。
${fieldErrors.age[0]}(获取第一个字符串),
(2)也可以通过s:fiedlErrors 标签表示,可通过fieldName属性显示指定字段的错误
问题3:若是simple且用<s:fieldErrors fieldName="age"></s:fieldErrors>来显示错误消息。则消息在 ul,li,span中。如何去除
在template.simple下面的fielderror.ftl 定义了simple主题下。s:fielderrors显示错误消息样式,修改配置文件即可。
方法:src下新建template.simple包。新建fielderror.ftl 文件。把原生的fielderror.ftl 内容复制到新建的fielderror.ftl ,剔除ul,li,span即可
问题4:如何自定义类型转换器?
1. (1) 为何?:因为struts2不能自动完成字符串到引用类型的转换
2) 如何定义:
首先定义一个类,继承StrutsTypeConverter(即扩展 StrutsTypeConverter 类)
2. 基于字段配置:
>在字段所在的Model(可能是Action,也可能是一个JavaBean)的包下;新建一个ModelClassName-conversion.properties文件
>在文件中键入键值对:fieldName = 类型转换器的全类名;
3.基于类型的配置
>在src下新建xwork-conversion.properties
>键入:待转换的类型= 类型转换器的全类名;
-->