如何从托管bean内部获取消息束字符串?

问题描述 投票:31回答:3

我希望能够从JSF 2受管Bean内部的消息束中检索字符串。在将字符串用作FacesMessage中的summary或​​details参数或引发的异常中的消息的情况下,可以这样做。

我想确保托管bean为用户的语言环境加载正确的消息束。我不清楚如何使用JSF API调用从托管Bean中执行此操作。

我的配置是:

  • 使用Tomcat 7作为容器,因此解决方案不能依赖仅在完整的应用程序服务器容器中起作用的API调用
  • 使用JSF 2参考实现(Mojarra)
  • 不使用任何允许CDI的库
  • NOTE:

我确实看到了this similar question,但这取决于我的配置中不可用的功能

编辑:

我在最初的问题中犯了一个错误。我要问的是“如何从托管bean中获取resource捆绑字符串”? BalusC给了我正确答案。我实际上要问的问题的解决方案非常相似:
public static String getResourceBundleString(
            String resourceBundleName,
            String resourceBundleKey)
        throws MissingResourceException {
    FacesContext facesContext = FacesContext.getCurrentInstance();
    ResourceBundle bundle = 
        facesContext.getApplication().getResourceBundle(
            facesContext, resourceBundleName);
    return bundle.getString(resourceBundleKey);
}

此外,这是another question的链接,它解释了“消息”包和“资源”包之间的区别。

我希望能够从JSF 2受管Bean内部的消息束中检索字符串。在将字符串用作...

jsf jsf-2 managed-bean message-bundle
3个回答
51
投票

您可以通过<message-bundle>获得Application#getMessageBundle()的完整合格捆绑包名称。您可以通过Application#getMessageBundle()获取当前语言环境。您可以从完全合格的捆绑包中获得UIViewRoot#getLocale()名称和语言环境,按UIViewRoot#getLocale()


26
投票
messageBundleName

6
投票

有两种方法可以使用@ManagedProperty("#{msg}") private ResourceBundle bundle; // +setter FacesContext context = FacesContext.getCurrentInstance(); ResourceBundle bundle = context.getApplication().getResourceBundle(context, "msg"); String message = bundle.getString("key"); 在托管bean中获取String资源束(请参见下面每个的定义):

© www.soinside.com 2019 - 2024. All rights reserved.