【问题标题】:jsf2 loading a resource bundle defined defined in a JARjsf2 加载在 JAR 中定义的资源包
【发布时间】:2013-09-01 12:56:39
【问题描述】:

我正在创建一个模块化 JSF 2.0 应用程序,每个模块都有自己的 faces-config 和 facelet 页面。这些模块被打包到 JAR 中并在主 JSF2 应用程序中使用。一切正常,但在每个 faces-config 文件中定义的资源包在运行时未解析。未解决意味着相应的文本不会显示在页面中。我将消息称为<h:outputText value="#{msg['message1']}" />

如何让它发挥作用?

【问题讨论】:

  • 没有人对此有答案吗?

标签: jsf resourcebundle


【解决方案1】:

经过一些研究,JAR 文件的 faces-config 文件中定义的资源包似乎在运行时没有解析。唯一的解决方案是在 facelet 页面中显式使用<f:loadBundle var="msg" basename="messages"/>。然后它将解析 JAR 文件中的 messages.properties。

【讨论】:

  • 谢谢,你拯救了我的下午 ;-) 我确认这适用于 JSF 2.2.13
【解决方案2】:

这是一个老话题,但也许可以帮助某人。

另一个可能的解决方案是在 faces-config.xml 中声明两个不同的包。类似的东西:

<application>
    <resource-bundle>
        <base-name>msgsprj</base-name>
        <var>msgsPrj</var>
    </resource-bundle>

    <resource-bundle>
        <base-name>msgsfmk</base-name>
        <var>msgsFmk</var>
    </resource-bundle>
</application>

所以在你的 XHTML 中你可以这样使用它们:

#{msgsFmk['generic.msg.remove']}

看看这个话题也是个好主意:

Using Multiple Resource bundles in JSF

【讨论】:

    【解决方案3】:

    打包为jar时,faces-config.xml必须在/classes/META-INF/目录下,并且每个facelet中都不需要添加f:loadBundle

    【讨论】:

      猜你喜欢
      • 2010-10-09
      • 1970-01-01
      • 2011-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多