如何在 ADF 12c 中重新加载列表资源包
Posted
技术标签:
【中文标题】如何在 ADF 12c 中重新加载列表资源包【英文标题】:How to reload list resource bundle in ADF 12c 【发布时间】:2017-09-26 22:35:52 【问题描述】:我未能重新加载我的资源包类以在页面上反映更改的翻译(使我的最终用户)。尽管 getContent 方法执行并且所有翻译作为从数据库获取的键/值和从 getContent 方法成功返回的 object[][]。每次我通过 actionListener 清除缓存并刷新 jsf 页面后都会发生这种情况。
ResourceBundle.clearCache();
我也尝试使用以下内容并得到相同的结果。
ResourceBundle.clearCache(Thread.currentThread().GetContextClassLoader());
为什么 WLS 总是看到旧的?我错过了什么吗?
版本:12.2.1.1.0 和 12.2.1.3.0
【问题讨论】:
【参考方案1】:最终用户 - 在完成翻译并为项目的国际化做出贡献后,翻译被保存到数据库中, 执行这些操作的过程通过以下步骤完成:
创建一个 HashMap 并加载映射中的所有资源键/值对 来自数据库:
while (rs.next())
bundle.put(rs.getString(1), rs.getString(2));
刷新应用程序的 Bundle
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);
从您的应用程序的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)
【讨论】:
根据您的解决方案,我有两个用于翻译的容器。首先是资源包,其次是地图对象。这种加载两个对象的写入方式是否包含我的翻译?以上是关于如何在 ADF 12c 中重新加载列表资源包的主要内容,如果未能解决你的问题,请参考以下文章