Java 缺失资源异常-Can';找不到基名称的捆绑包

Java 缺失资源异常-Can';找不到基名称的捆绑包,java,properties,struts2,locale,bundle,Java,Properties,Struts2,Locale,Bundle,我知道在stackoverflow和其他论坛上有很多关于这个错误的问题和答案。但我还是找不到解决办法 出于速度原因,我有一个实用程序类,它根据提供的语言环境加载所有静态数据映射(例如月份) 所以这个实用程序类看起来像这样: public static final String GLOBAL_MESSAGES = "globalMessages"; private static Map<Integer,Month> monthsMap; private ResourceBundle

我知道在stackoverflow和其他论坛上有很多关于这个错误的问题和答案。但我还是找不到解决办法

出于速度原因,我有一个实用程序类,它根据提供的语言环境加载所有静态数据映射(例如月份)

所以这个实用程序类看起来像这样:

public static final String GLOBAL_MESSAGES = "globalMessages";

private static Map<Integer,Month> monthsMap;

private ResourceBundle getResourceBundle(Locale locale) {
    ResourceBundle rb = ResourceBundle.getBundle(GLOBAL_MESSAGES, locale);
    return rb;
}

private Map<Integer,Month> getMonths() {
    if(monthsMap == null) {
        setMonths();
    }
    return monthsMap;
}

private void setMonths() {
    try {
        monthsMap = getFactory().getDAO().getAllMonths();
    } catch (SQLException e) {
        logger.error(e);
    } catch (EmptyResultException e) {
        logger.error(e);
    }
}

public Map<Integer,Month> getMonths(Locale locale) {
    if(locale == null) {
        return monthsMap;
    } else {
        if(this.locale != locale) {
            this.locale = locale;
            setMonths();
        }
    }
    ResourceBundle rb = getResourceBundle(locale);
    Map<Integer,Month> map = new HashMap<Integer, Month>();
    for(Month akVO : getMonths().values()) {
        try {
            akVO.setName(rb.getString(akVO.getName()));
        } catch (MissingResourceException e) {
            //already done
        }
        map.put(akVO.getId(), akVO);
    }       
    return map;
}

我真的迷路了。绝望…

好吧。。。找到了错误。一天之后。。。问题在于区分大小写的信件。尽管如此,当使用“en_US”从rest设置区域设置时,ResourceBundle(在使用rest时)不知何故在寻找“en_US”

编辑: 好的,我还发现了为什么都是小写字母的错误。 问题是,因为我正在使用以下内容创建区域设置:

Locale locale = new Locale("en_US");
而不是:

Locale locale = new Locale("en","US");

在这种情况下,如果有人在Glassfish服务器上遇到问题,可以在管理概述中设置区域设置

简单覆盖默认区域设置,如图所示


有人可能会觉得这很有用,我有好几个小时的麻烦,不希望任何人也有这种问题。

:)我必须喜欢你的评论:)你帮了我的忙。我使用的是Locale.getDefault(),它在Eclipse和was容器中工作得很好,但当我转到UNIX框时就不行了。谢谢更糟糕的是,在Mac(开发机器)上可以正常工作,因为文件查找似乎不区分大小写,但当移动到Linux生产设备时,它会停止工作。一个古老的,但仍然是一个有用的好东西。祝你有一个漂亮的答题徽章!同样的问题,损失的时间。
Locale locale = new Locale("en","US");