Я пытался кэшировать свои 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;
}
Кэш наций заполнен данными, которые мне нужны.
Теперь моя проблема заключается в том, что я хочу создать 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 находится внутри формы панели. Это работает, если я создаю Map внутри моего компонента, а не с кешем. Все свойства бина имеют геттер и сеттер! Кэш имеет данные, вопрос только в том, чтобы получить к нему доступ с помощью JSF!
Вы можете увидеть данные внутри кеша:
http://prntscr.com/ktuead
Как и должно быть (это похоже на тот же код и HashMap):
http://prntscr.com/ktufji
Это раскрывающийся список с кэшем (без ошибок!):
http://prntscr.com/ktufqw