首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用faces-config jsf中的多个属性时,我总是调用资源?

调用faces-config jsf中的多个属性时,我总是调用资源?
EN

Stack Overflow用户
提问于 2015-02-07 23:30:06
回答 1查看 445关注 0票数 0

我管理两个属性,一个用于泛型消息,一个用于属于我的系统的每个模块,但我遇到的问题是,当调用第一个方法getMessage()时,它应该何时调用资源的属性。

代码语言:javascript
复制
public class ResourceBundleUtil implements Serializable {

    private static final long serialVersionUID = 1L;

    public static final String MESSAGE_PATH = "messages";
    public static final String RESOURCE_PATH = "resources";
    private static HashMap<String, Object> messageBundles = new HashMap<String, Object>();

    public static String getMessage(String key) {
        if (key == null) {
            return null;
        }
        try {
            Locale locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
            if (locale == null) {
                locale = Locale.ENGLISH;
            }
            ResourceBundle messages = (ResourceBundle) messageBundles.get(locale.toString());
            if (messages == null) {
                messages = ResourceBundle.getBundle(MESSAGE_PATH, locale);
                messageBundles.put(locale.toString(), messages);
            }
            return messages.getString(key);
        } catch (Exception e) {
            return key;
        }
    }

    public static String getResource(String key) {
        if (key == null) {
            return null;
        }
        try {
            Locale locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
            if (locale == null) {
                locale = Locale.ENGLISH;
            }
            ResourceBundle messages = (ResourceBundle) messageBundles.get(locale.toString());
            if (messages == null) {
                messages = ResourceBundle.getBundle(RESOURCE_PATH, locale);
                messageBundles.put(locale.toString(), messages);
            }
            return messages.getString(key);
        } catch (Exception e) {
            return key;
        }
    }

}

我遇到的问题是,getMessage()方法总是调用资源属性,何时消息:

代码语言:javascript
复制
if (messages == null) {
       messages = ResourceBundle.getBundle(MESSAGE_PATH, locale);
       messageBundles.put(locale.toString(), messages);
}

No输入条件,并注意到名称值附带的是资源。

与方法getResource()不同的是,如果我注意到操作正常。

我可以评论一下这个问题,谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-08 13:20:53

看起来问题在于,您将这两种捆绑包存储在一个映射中。因此,如果首先使用资源包,则将其添加到映射中。关键是当前区域设置(例如"en")。

然后,如果您尝试使用相同的区域检索消息包,那么实际上您可以获得资源包,而不是messages 1,因为您使用的是相同的密钥。

要解决这个问题,要么使用两个单独的映射,要么使用带包标识符的预置键,如下所示:

代码语言:javascript
复制
messageBundles.put("resources_" + locale.toString(), messages);

顺便说一句。您使用标准Java包。有关如何使用faces-config.xml中定义的包的更多提示,可以在这里找到:How can I get a message bundle string from inside a managed bean?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28388754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档