我试图将下拉数据缓存在infinispan中。
我的Infinispan进口商品是(是,还有其他进口商品):
import org.infinispan.Cache;
import org.infinispan.configuration.cache.ConfigurationBuilder;
import org.infinispan.manager.DefaultCacheManager;
这是我的豆子:
@Startup
@Named("cache")
@ApplicationScoped
public class CacheManagerBean implements Serializable {
private static final long serialVersionUID = 1L;
private DefaultCacheManager cacheManager;
// Dropdown-Values
private Cache<Integer, String> nations;
@Inject
MyEJB myEJB;
@PostConstruct
public void init(){
createCache();
updateCache();
}
private void createCache() {
// Construct a simple local cache manager with default configuration
cacheManager = new DefaultCacheManager();
// Define cache configuration
cacheManager.defineConfiguration("nations", new ConfigurationBuilder().build());
}
public void updateCache() {
nations = cacheManager.getCache("nations");
nations.putAll(myEJB.fetchNations());
}
public Cache<Integer, String> getNations() {
return nations;
}
public void setNations(Cache<Integer, String> nations) {
this.nations = nations;
}
国家/地区缓存中充满了我需要的数据。
现在我的问题是,我想用此缓存的数据创建一个SelectOneMenu并用它填充selectItems:
<p:selectOneMenu id="nation"
value="#{bean.nation}"
styleClass="DetailsDropdown" var="activeNation">
<f:selectItem itemLabel="" itemValue="" noSelectionOption="true" />
<f:selectItems value="#{cache.nations.entrySet()}" var="entry"
itemValue="#{entry.key}" itemLabel="#{entry.value}" />
</p:selectOneMenu>
下拉菜单始终为空。有没有解决方法,或者我错过了什么? 也许我需要为Maven或Wildfly添加一些配置?
我使用Wildfly 12,Primefaces 6.2,Infinispan 9.2.1.Final和Maven。
谢谢!
编辑:SelectOneMenu在面板内部。如果我在视图bean中创建一个Map,而不是使用缓存,则它可以工作。所有bean属性都有getter和setter!缓存具有数据,问题仅在于使用JSF进行访问!
您可以看到缓存中的数据: http://prntscr.com/ktuead
应该如何(就像使用完全相同的代码和HashMap一样): http://prntscr.com/ktufji
这是带有缓存的下拉列表(没有错误!): http://prntscr.com/ktufqw
答案 0 :(得分:0)
问题出在var
属性上。如果存在但未使用此属性,看来p:selectOneMenu
无法正常工作。这是我以前做过的测试的残余。
<p:selectOneMenu id="nation"
value="#{bean.nation}"
styleClass="DetailsDropdown">
<f:selectItem itemLabel="" itemValue="" noSelectionOption="true" />
<f:selectItems value="#{cache.nations.entrySet()}" var="entry"
itemValue="#{entry.key}" itemLabel="#{entry.value}" />
</p:selectOneMenu>
删除var标签后,一切正常!
感谢库克尔捷耶的时间和耐力!