要使用资源包从属性文件中检索消息,您必须了解Struts 2资源包搜索顺序:
资源包搜索顺序
资源束按以下顺序搜索:
- ActionClass.properties
- Interface.properties
- BaseClass.properties
- ModelDriven的模型
- package.properties
- 搜索i18n消息密钥层次结构本身
- 全局资源属性
有关详细说明,请参阅Struts 2 Resource Bundle文档 。
实际上,按上述顺序组织属性文件是完全不可能的。 因此,只需了解几个常用的搜索顺序就足够了: ActionClass.properties , package.properties和Global resource properties 。 见下图:
如果com.mkyong.user.action.LoginAction要通过资源包获取消息,它将搜索
- com.mkyong.user.action.LoginAction.properties(找到,退出,否则返回下一个)
- com.mkyong.user.action.package.properties(找到,退出,否则下一个)
- com.mkyong.user.package.properties(找到出口,否则返回下一步)
…在每个父目录中一直找到根目录的package.properties - 如果在应用程序中进行配置,则查找全局资源属性
了解此搜索顺序可以使您更加自信地确定属性文件的正确文件夹。
获取资源包
很少有访问资源包的示例:
PS“username.required”和“ 用户名 ”是在属性文件中的关键。
1.动作课
在Action类中,您可以扩展ActionSupport并通过getText('key')函数获取资源包。
...
public class LoginAction extends ActionSupport{
...
public void validate(){
if("".equals(getUsername())){
addFieldError("username", getText("username.required"));
}
}
}
2.属性标签
在属性标签中,使用getText('key')。
<s:property value="getText('username')" />
3.文字标签
在文本标签中,在“名称”属性中设置关键字。
<s:text name="username" />
4.关键属性
UI组件的Key属性具有特殊功能,请在此key属性示例中查看详细信息。
<s:textfield key="username" />
5. I18n标签
此i18n标记可以从在“名称”属性中声明的指定资源束中获取消息。 在此示例中,它要求从com / mkyong / user / package.properties文件中获取“用户名”消息。
<s:i18n name="com.mkyong.user.package" >
<s:text name="username" />
</s:i18n>
下载完整的练习项目– Struts2-Resource-Bundle-Example.zip
参考
翻译自: https://mkyong.com/struts2/struts-2-resource-bundle-example/