Spring MVC и Thymeleaf. В чем разница между th: value и th: field при итерации нескольких элементов? - PullRequest
0 голосов
/ 13 февраля 2019

Я хочу отобразить несколько элементов из базы данных в представление Thymeleaf, используя форму HTML, чтобы я мог внести изменения и обновить базу данных.

Я собирался использовать th: поле .но произошла ошибка.когда я пытался использовать th: значение .и показывает данные.

<div th:each="item : ${courses}">
  <form th:object="${item}">
    <input th:field="*{name}" type="text" id="name" name="name" /> // error occur
  </form>
</div>

ошибка следующая.

Neither BindingResult nor plain target object for bean name 'item' available as request attribute

В то время как этот код ниже работает нормально.

<div th:each="item : ${courses}">
  <form th:object="${item}">
    <input th:value="*{name}" type="text" id="name" name="name" /> // ok
  </form>
</div>

Я на правильном пути?Вы можете объяснить, почему?а разница между полем и значением?

1 Ответ

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

Суть в том, что вы можете использовать th:object и th:field только вместе для атрибута базовой модели.Это означает, что вы не можете использовать его при итерации (потому что ${item} не существует в модели, это переменная, сгенерированная th:each).Требования прописаны здесь :

Значения атрибутов th:object в тегах формы должны быть выражениями переменных (${...}), указывающими только имя атрибута модели, безсвойство навигации.Это означает, что выражение типа ${seedStarter} допустимо, но ${seedStarter.data} не будет.

Внутри тега <form> другой атрибут th:object не может быть указан.Это согласуется с тем фактом, что HTML-формы не могут быть вложенными.

th:field устанавливает name, id и value поля.Таким образом, они несколько взаимозаменяемы, но вы должны использовать th:field, когда это возможно, потому что он предлагает дополнительную интеграцию с пружиной и работает со всеми видами ввода - но они действительно полезны, только когда вы редактируете один объект на странице.

Поскольку у вас есть несколько объектов, которые вы выполняете итерацию, вам придется вручную установить name, id и value, как вы делаете.

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