在属性文件中添加第二级数据

时间:2013-03-24 12:51:35

标签: java jsf jsf-2 properties

我所拥有的属性文件如下所示。

welcome.properties

admin = Admin
welcomeAdmin = Welcome Admin
editAdmin = Edit Admin

因为我有重复的管理字,我想使用类似下面的内容。

admin = Admin
welcomeAdmin = Welcome #{admin}
editAdmin = Edit #{admin}

因此,如果我在一个地方改变,即在admin = Admin改变,它将反映的所有地方。

任何想法/建议如何完成这项工作将不胜感激。

1 个答案:

答案 0 :(得分:0)

按照今天的说法,经典的ResourceBundle类不支持命名参数及其替换,而是在您的包的键值对中支持{0}类型的简单占位符,用MessageFormat#format代替。

有鉴于此,如果您将Welcome #{admin}替换为Welcome {0},则可以使用以下方法之一来实现您所寻求的功能:

  1. JSF&#39; <h:outputFormat>

    <h:outputFormat value="#{msg.welcomeAdmin}">
        <f:param value="#{msg.admin}" />
    </h:outputFormat>
    
  2. JSTL&#39; <fmt:message>

    <fmt:message key="msg.welcomeAdmin">
        <fmt:param value="#{msg.admin}">
    </fmt:message>
    
  3. 您也可以创建自己的EL函数,标记处理程序或UI组件,或者在bean中使用MessageFormat类方法等。当然,您也可以扩展ResourceBundle用于支持命名参数的类,并返回已解析已命名参数的消息。

    建议阅读

    1. Do resource bundles in Java support runtime string substitution?;
    2. How to use Parameterized MessageFormat with non-Value attributes of JSF components;
    3. Pass parameters to messages from resource bundle to components other than h:outputFormat