0

我无法重新加载我的资源包类以在页面上反映更改的翻译(使我的最终用户)。尽管 getContent 方法执行并且所有翻译作为从数据库获取的键/值和从 getContent 方法成功返回的 object[][]。每次我通过 actionListener 清除缓存并刷新 jsf 页面后都会发生这种情况。

ResourceBundle.clearCache();

我也尝试使用以下内容并得到相同的结果。

ResourceBundle.clearCache(Thread.currentThread().GetContextClassLoader());

为什么 WLS 总是看到旧的?我错过了什么吗?

版本:12.2.1.1.0 和 12.2.1.3.0

4

1 回答 1

0

最终用户 - 在完成翻译并为项目的国际化做出贡献后,将翻译保存到数据库中,执行这些操作的过程通过以下步骤完成:

  1. 创建一个 HashMap 并从数据库中加载映射中的所有资源键/值对:

    while (rs.next()) {      
        bundle.put(rs.getString(1), rs.getString(2));       
    }            
    
  2. 刷新应用程序的捆绑包

    SoftCache cache =
                (SoftCache)getFieldFromClass(ResourceBundle.class,
                                             "cacheList");
    synchronized (cache) {
            ArrayList myBundles = new ArrayList();
    
            Iterator keyIter = cache.keySet().iterator();
            while (keyIter.hasNext()) {
                Object key = keyIter.next();
                String name =
                    (String)getFieldFromObject(key, "searchName");
    
                if (name.startsWith(bundleName)) {
                    myBundles.add(key);
                    sLog.info("Resourcebundle " + name +
                              " will be refreshed.");
                }
            }
            cache.keySet().removeAll(myBundles);
    
  3. 从您的应用程序中获取一个字符串ResourceBoundle

    for (String resourcebundle : bundleNames) {
            String bundleName =
            resourcebundle + (bundlePostfix == null ? "" : bundlePostfix);
            try {
                  bundle =  ResourceBundle.getBundle(bundleName, locale, getCurrentLoader(bundleName));
    
            } catch (MissingResourceException e) {
                // bundle with this name not found;
            }
    
            if (bundle == null)
                continue;
            try {
                message = bundle.getString(key);
                if (message != null)
                    break;
            } catch (Exception e) {
        }
    } 
    
于 2017-10-24T14:57:59.697 回答