使用Infinispan Cache填充JSF SelectOneMenu

问题描述 投票:0回答:1

我试图在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

jsf primefaces infinispan
1个回答
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标签后一切正常!

感谢Kukeltje的时间和耐力!

© www.soinside.com 2019 - 2024. All rights reserved.