Thymeleaf динамически создает формы, используя th: each - PullRequest
0 голосов
/ 31 января 2019

Я хотел бы знать, как создавать формы, использующие th:object для каждого объекта, зацикленного в th:each.Например, у меня есть следующий код.

HTML

<th:block th:each="store: ${stores}">
    <form th:object="${store}" th:action="@{/modify-store}">
        <input th:field="*{idStorePk}"/>
        <input th:field="*{name}"/>
        <input th:field="*{phoneNumber}"/>
        <button type="submit">Modify</button>
    </form>
</th:block>

Контроллер

@RequestMapping(value = "/stores")
public String getIndex(Model model) {
    model.addAttribute("stores", storeService.getAllStores());
    return "store";
}

Итак, яхотел бы добавить форму для каждого объекта, но кажется, что это невозможно, и я получаю следующую ошибку.

java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'store' available as request attribute

Итак, я решил добавить @ModelAttribute в моем контроллере, но могуне вернуть фактическое хранилище.

@ModelAttribute("store")
public Store getStore(Store store) {
    return store;
}

При таком подходе все мои формы имеют нулевые значения.Я также пытался добавить @PathVariable, но не могу связать его с помощью th:object.Есть ли решение для этого?

1 Ответ

0 голосов
/ 01 февраля 2019

Вы отправляете хранит в вашем контроллере в атрибуте модели и на втором контроллере, куда вы отправляете свою форму, вы используете store , поэтому выполучаю эту ошибку.Поэтому исправьте орфографическую ошибку на любом вашем контроллере.Вот так: -

@RequestMapping(value = "/stores")
public String getIndex(Model model) {
    model.addAttribute("stores", storeService.getAllStores());
    return "store";
}

И ваш второй контроллер, куда вы отправляете свою форму, будет выглядеть так -

@ModelAttribute("stores")
public Store getStore(Store store) {
    return store;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...