Struts2的各种约定规则实在很难记忆,现在总结一下。
一、国际化资源文件的basename
1. 全局级别:配置在struts.xml的<constant name="struts.custom.i18n.resources" value="YOUR_BASENAME"/>
2. 包级别: 放在某个package下,且basename固定为package, 如package.properties, package_zh_CN.properties
3. Action级别: 与Action类放在一起,且basename为Action名, 如LoginAction对应的资源文件为LoginAction.properties, LoginAction_en_US.properties
4. 临时级别: basename任意,放在classpath下, 仅用于JSP: <s:i18n name="TEMP_BASENAME">
二、类型转换
1. 全局级别:
(1) 注册文件:文件名固定为xwork-conversion.properties,内容为<待转换属性的全限定名>=<转换类的全限定名>
(2) 转换错误提示: 在全局级别的资源文件中添加xwork.default.invalid.fieldvalue=my own {0} conversion global error
2. Action级别:
(1) 注册文件:文件名为<Action类名>-conversion.properties,内容为<Action属性名>=<转换类的全限定名>
(2) 转换错误提示:在Action级别的资源文件中添加invalid.fieldvalue.<Action属性名>=my own xxx conversion local error (其中<Action属性名>可以为DTO,通过"."导航到其关联的属性)
三、输入校验:
1. 校验配置文件(与Action类同路径):
<actionClass>-validation.xml
<actionClass>-<actionAlias>-validation.xml(适合多逻辑的Action, <actionAlias>对应struts.xml中<action>标签的name属性值)
2. 校验错误提示:
在Action级别/包级别/全局级别的资源文件中配置<msgkey>=<msgvalue>,校验配置文件错误提示设置为<message key="<msgkey>">。
<msgvalue>可以包含校验器的参数,如:
<field-validator type="date">
<param name="min">1900-01-01</param>
<param name="max">2050-02-21</param>
<message>年纪必须在${min}到${max}之间</message>
</field-validator>
3. 校验文件的搜索规则:
假设ChildAction继承自BaseAction,则Struts2会以以下固定顺序搜索:
(1) BaseAction-validation.xml
(2) BaseAction-别名-validation.xml
(3) ChildAction-validation.xml
(4) ChildAction-别名-validation.xml