我试图在infinispan中缓存我的dropdowndata。
我的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;
}
国家缓存充满了我需要的数据。
现在我的问题是,我想用这个Cache的数据创建一个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! Cache有数据,问题只是关于用JSF访问它!
您可以在缓存中查看数据:http://prntscr.com/ktuead
应该如何(就像使用完全相同的代码和HashMap):http://prntscr.com/ktufji
这是Dropdown with Cache(没有错误!):http://prntscr.com/ktufqw
问题是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标签后一切正常!
感谢Kukeltje的时间和耐力!