Как бэкэнд-программист, я редко сталкиваюсь с веб-аспектами.По меньшей мере, мое понимание фреймворков в целом и Thymeleaf в частности является относительно упрощенным.Но теперь мне нужно создать несколько базовый, но, надеюсь, все еще приличный веб-сайт для ведения базы данных.Это очень маленькая схема, которая будет обновляться только внутренними пользователями.Таким образом, он не должен быть обращен к клиенту отполирован или защищен от всех злоумышленников.Тем не менее программист во мне хочет, чтобы это было больше, чем просто мусор.
Я думаю, что было бы неплохо, это HTML-таблица, представляющая строки базы данных - DUH.Но я бы хотел, чтобы вся таблица была редактируемой, а не заставляла меня писать код, и пользователь нажимал на отдельные строки для редактирования.
Много лет назад я делал нечто подобное с JQuery.Я также помню, что JQuery лучше всего используется людьми, которые знают, что они делают.Поэтому я пытаюсь достичь этого с меньшей сложностью.Я хотел бы по-прежнему использовать Thymeleaf, чтобы хотя бы сделать вещи немного интереснее.
И именно здесь мои знания сели на мель.Я не могу понять, как получить доступ к данным.
Поскольку установление некоторого ограничения на размер таблицы кажется хорошей идеей, мой контроллер SpringMVC возвращает объект Page, содержащий извлеченные объекты модели.Таким образом, мой ответ выглядит так:
Бесстыдно копируя примеры, было тривиально отображать модели в таблице, например:
<tr th:each="restProvider : ${providerPage.content}">
<td th:text="${restProvider.enabled}" />
Это все было здорово!Но когда я попытался сделать таблицу редактируемой, тимелиф оказался не таким уж приличным.Проблема в том, что я согласен с этим.На самом деле, сейчас трудно понять, почему это работало раньше.
<form action="#" th:action="@{/saveProvider}"
th:object="${providerPage.content}" method="post">
<table border="1">
<tbody>
<tr th:each="restProvider, i : ${providerPage.content}" >
<td th:style="'text-align: center;'" /> <input type="text" th:field="*{content[__${i.index}__].enabled}" />
<td th:text="${restProvider.serviceName}" />
org.thymeleaf.exceptions.TemplateInputException: произошла ошибка при разборе шаблона (template: "ресурс пути к классу [templates / listProviders.html] ")] с первопричиной org.springframework.beans.NotReadablePropertyException: недопустимое свойство restProvider класса бина [org.springframework.data.domain.PageImpl]: свойство бина restProvider недоступно для чтения или имеет недопустимый получательМетод: Тип возвращаемого значения получателя соответствует типу параметра установщика?
Все это имеет смысл.Что мне действительно нужно сделать, это привести PageImpl.content в массив объектов RestProvider.Но я понятия не имею, как это сделать.
Моя лучшая идея на данный момент - либо полностью отказаться от Pagable, чего я не хочу делать, либо поместить массив объектов непосредственно вМодель - таким образом отправка 2 копий пользовательских данных.
Первая идея удаляет функциональность - или, по крайней мере, заставляет меня кодировать ее вручную.Как было предложено здесь: приведение типа в выражениях EL с использованием Thymeleaf
Второе действительно просто вариант первого.Я уверен, что это сработает.Это также кажется совершенно ужасной идеей и не может быть способом, которым инструмент должен использоваться.
РЕДАКТИРОВАТЬ 1
Используя советы @Metroids Iизменил обозначение поля.Но теперь я получаю
Свойство bean-компонента 'content.content [0]' не читается или имеет недопустимый метод получения
Итак, я сделал, казалось бы, логичную вещь и взялиз "контента".Это оставило меня с:
<td th:style="'text-align: center;'" /> <input type="text" th:field="*{[__${i.index}__].enabled}" />
Но это дало мне только то, что:
Bean property 'content.[0]' is not readable or has an invalid getter method
Я пробовал несколько других вещей.В том числе возиться с тем, как указан итератор.Но ни один из них не может избавиться от лишних ".".
РЕДАКТИРОВАТЬ 2
Добавлена информация формы