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

Thymeleaf ModelAttribute List

Я пытаюсь иметь что-то вроде List как ModelAttribute с Thymeleaf, но у меня не получается. Я прочитал эту страницу http://www.bincsoft.com/blog/thymeleaf-and-lists-in-forms/, но мой код не работает.

вот мои файлы:

класс контейнера

import java.util.ArrayList;
import java.util.List;

import javax.validation.Valid;


public class WagerateForm {

    @Valid
    private List<WagerateUi> wagerateuilist;

    public WagerateForm() {
        wagerateuilist = new ArrayList<WagerateUi>();
    }

    public WagerateForm(List<WagerateUi> wagerateuilist) {
        this.wagerateuilist = wagerateuilist;
    }

    //getter , setter omitted
}

мой DTO для пользовательского интерфейса

public class WagerateUi {

    //getter , setter omitted

    private boolean standard;
    private Long value;
}

контроллер

@Named
@RequestMapping("/wagerate")
public class WagerateController {

@RequestMapping(value="")
public String wagerate(@ModelAttribute("wagerateform") WagerateForm wagerateForm,
        BindingResult bindingResult) {

    List<WagerateUi> wagerateUiList = wagerateForm.getWagerateuilist();

    System.out.println(wagerateUiList.size());

    //dummy items
    for (int i = 0; i < 10; i++) {
        WagerateUi temp = new WagerateUi();
        temp.setValue(100L);
        wagerateUiList.add(temp);
    }


    return "wagerate";
}

тимелеаф HTML

<form id="wagerateform" class="form-horizontal" role="form" action="#" th:object="${wagerateform}" th:action="@{/wagerate}" method="post">              

    <div th:each="wagerateui, iterStat  : ${wagerateform.wagerateuilist}">      
        <input th:field="*{wagerateform[__${iterStat.index}__].value}" class="form-control">
    </div>
    <button type="submit">Test</button>

</form>

сообщение об ошибке

Caused by: org.springframework.beans.NotReadablePropertyException: Invalid property 'wagerateform[0]' of bean class [WagerateForm]: Bean property 'wagerateform[0]' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?
    at org.springframework.beans.BeanWrapperImpl.getPropertyValue(BeanWrapperImpl.java:725)
    at org.springframework.beans.BeanWrapperImpl.getNestedBeanWrapper(BeanWrapperImpl.java:571)
    at org.springframework.beans.BeanWrapperImpl.getBeanWrapperForPropertyPath(BeanWrapperImpl.java:548)
    at org.springframework.beans.BeanWrapperImpl.getPropertyValue(BeanWrapperImpl.java:714)
    at org.springframework.validation.AbstractPropertyBindingResult.getActualFieldValue(AbstractPropertyBindingResult.java:99)
    at org.springframework.validation.AbstractBindingResult.getFieldValue(AbstractBindingResult.java:229)
    at org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:120)
    at org.thymeleaf.spring4.util.FieldUtils.getBindStatusFromParsedExpression(FieldUtils.java:348)
    at org.thymeleaf.spring4.util.FieldUtils.getBindStatus(FieldUtils.java:288)
    at org.thymeleaf.spring4.util.FieldUtils.getBindStatus(FieldUtils.java:260)

Размер списка в контроллере всегда равен 0. Я не вижу, что не так, я пробовал разные способы, но думаю, что мой Thymeleaf/Spring EL неверен.


Ответы:


1

Я до сих пор работал с:

<input th:value="${wagerateform.wagerateuilist[__${iterStat.index}__].value}" class="form-control">
07.08.2014

2

Ваш wagerateform не является списком, Список — это wagerateuilist. С помощью th:each вы заполняете объект wagerateui элементами, просматривая свой список.

<div th:each="wagerateui : ${wagerateform.wagerateuilist}">      
        <input th:field="${wagerateui.value}" class="form-control">
</div>
06.08.2014
  • да, вы правы, это не список, ваш код не работает, в моем случае я получаю сообщение об ошибке с Bindingresult. Теперь он работает с :‹input th:value=${wagerateform.wagerateuilist[${iterStat.index}].value} class=form-control› . Спасибо 07.08.2014
  • Убрал запятую в wagerateui, : ${wagerateform.wagerateuilist}, думаю теперь должно работать. 08.08.2014
  • Новые материалы

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

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

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

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

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

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

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