【发布时间】:2019-02-15 20:49:11
【问题描述】:
我试图在 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 中制作地图,而不是使用缓存,它会起作用。所有 bean 属性都有 getter 和 setter!缓存有数据,问题只是用 JSF 访问它!
可以看到缓存里面的数据: http://prntscr.com/ktuead
应该怎么做(代码和HashMap一模一样): http://prntscr.com/ktufji
这是带有缓存的下拉菜单(没有错误!): http://prntscr.com/ktufqw
【问题讨论】:
-
嗨,通过标记它 oracle 和 wildfly,您可以隐含地声明它,例如确实适用于 mysql 或 glassfish。标签不是用于您使用什么,而是用于指示问题所在的位置。而且你的头衔也不好。它只是声明了两个标签。
-
谢谢,我删除了标签并更改了标题
-
如果您只使用
<f:selectItems value="#{cache.nations}" />或使用纯jsf<h:selectOneMenu ...>而不是primefaces 怎么办?顺便说一句,你的 PF 版本是什么? -
@Kukeltje 非常感谢,您对纯 JSF 的问题帮助了我。现在我知道我的错误了!
-
在你关于不工作版本的截图中,我什至看不到“无选择选项”。当然下拉部分不仅被屏蔽,而且面板边界(可能不在原始边界中)
标签: jsf primefaces infinispan