Nano Hash - криптовалюты, майнинг, программирование

В модели обновляются только значения из последней итерации pe:fluidGrid p:dataList.

В моем компоненте у меня есть HashMap<PDIDefinition, List<FluidGridItem>>, который я использую в <p:dataList> для динамического создания формы.

Сначала я создаю FluidGridItems и помещаю их в hashMap:

private HashMap<PDIDefinition, List<FluidGridItem>> formItems = new HashMap<>();

private void generateModel() {

    for (PDIDefinition pdid : pdiDefinitions) {
        Fragment f = new Fragment();
        f.setDefinition(pdid.getFragmentDefinition());
        fragments.add(f);
        List<FluidGridItem> items = new ArrayList<>();
        formItems.put(pdid, items);

        //((DynamicField)((FluidGridItem)formItems.get(pdid).get(0)).getData()).label;

        for (FragmentValueDefinition fvd : f.getDefinition().getFragmentValues()) {
            FragmentValue fv = new FragmentValue();
            fv.setFragmentValueDefinition(fvd);
            fv.setFragmentId(f.getInner());
            if (f.getValues() == null) {
                f.setValues(new ArrayList<>());
            }
            f.getValues().add(fv);
            fragmentValues.add(fv); //not required?
            DynamicField df = new DynamicField((fv), items.size());
            fields.add(df);

            if ("String".equals(fvd.getType())) {
                items.add(new FluidGridItem(df, "stringValue"));
            }
            if ("Integer".equals(fvd.getType())) {
                items.add(new FluidGridItem(df, "integerValue"));
            }
            if ("Date".equals(fvd.getType())) {
                items.add(new FluidGridItem(df, "dateValue"));
            }
        }

    }

}

Затем я конвертирую их, как указано в Отображение ключей и значений Hashmap в таблица данных простых лиц:

public List<Map.Entry<PDIDefinition,List<FluidGridItem>>> getFormItemsForDisplay(){
    Set <Map.Entry<PDIDefinition,List<FluidGridItem>>> s = formItems.entrySet();
    return new ArrayList<>(s);
} 

Наконец, на мой взгляд, я создаю форму, используя dataList и FluidGrid:

<p:dataList var="pdi" value="#{FormGenerator.formItemsForDisplay}" id="all" varStatus="loop" type="none">
        <p:panel id="panel" header="#{pdi.key.getFragmentDefinition().getFragmentName()}" style="margin-bottom:1em; width:100%;">

            <pe:fluidGrid  id="fluidGrid" value="#{pdi.value}" var="data"
                           hGutter="20" vGutter="10" widgetVar="fgwv_#{loop.index}">

                <pe:fluidGridItem type="stringValue"  id="txt_">
                    <div class="dynaFormLabel">
                        <p:outputLabel for="txt" value="#{data.label}"/>
                    </div>
                    <p:inputText id="txt" value="#{data.value}"/>
                </pe:fluidGridItem>
                <pe:fluidGridItem type="integerValue" id="int_">
                    <div class="dynaFormLabel">
                        <p:outputLabel for="int" value="#{data.label}"/>
                    </div>
                    <p:spinner id="int" value="#{data.value}" />
                </pe:fluidGridItem>
                <pe:fluidGridItem type="dateValue" id="cal_">
                    <div class="dynaFormLabel">
                        <p:outputLabel for="cal" value="#{data.label}"/>
                    </div>
                    <p:calendar id="cal" value="#{data.value}" showOn="button"/>
                </pe:fluidGridItem>

            </pe:fluidGrid>

        </p:panel>
    </p:dataList>

Это приводит к форме, которую я хочу.

введите здесь описание изображения

Моя проблема в том, что на сервере обновляются только значения из последней итерации dataList (PDF на изображении).

Спасибо за вашу помощь.


Ответы:


1

Решил это заменой

<p:dataList var="pdi" value="#{FormGenerator.formItemsForDisplay}" 
    id="all" varStatus="loop" type="none">

by

<c:forEach var="pdi" items="#{FormGenerator.formItemsForDisplay}"
    id="all" varStatus="loop">

Получил идею от https://zenidas.wordpress.com/recipes/jsf-update-single-entry-in-a-datalist-like-component/

11.06.2015
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..