Использование Infispan Cache для заполнения JSF SelectOneMenu - PullRequest
0 голосов
/ 11 сентября 2018

Я пытался кэшировать свои 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

1 Ответ

0 голосов
/ 13 сентября 2018

Проблема была в атрибуте 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 за время и выносливость!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...