#java #spring #spring-mvc #frontend #freemarker
Вопрос:
Я создаю приложение CRUD с помощью Spring boot и использую Freemarker в качестве движка шаблонов.
В частности, я использую макрос freemarker для создания всего поля ввода html с относительной привязкой модели:
(велосипедная форма.ftlh)
<#import "/spring.ftl" as spring /> <!doctype html> ... ... <label for="licensePlate">License Plate</label> <@spring.formInput "bike.licensePlate" /> <@spring.showErrors "<br>"/> <div> <#assign directBuyValue = { "bikeDirectBuy": "Direct Buy" }> <@spring.formCheckboxes "bike.bikeDirectBuy" directBuyValue ""/> </div> ...
все в порядке, так как я использую этот метод для представления ввода приложения, поля привязываются к модели, и я могу вставить их в БД.
Теперь я хотел бы использовать ту же страницу/представление bikeForm.ftlh в качестве представления обновления (очевидно, предоставляя действительную и полную модель данных с моего контроллера), но я получаю эту ошибку на non-@spring.formInput (поля FormInput работают нормально) :
616: ERROR runtime - Error executing FreeMarker template freemarker.core.NonSequenceOrCollectionException: For "#list" list source: Expected a sequence or collection, but this has evaluated to a string (wrapper: f.t.SimpleScalar): ==> list [in template "spring.ftl" at line 369, column 12]
Это потому, что, я думаю, я предоставляю представление с уже полной моделью, в которой bike.bikeDirectBuy имеет строковое значение, которое freemarker пытается использовать в качестве карты для всех возможных значений флажков формы.
Чего я не понимаю, так это того, ошибаюсь ли я, используя то же представление, что и представление ввода и обновления, или неправильно использую макросы. С помощью этого метода я вынужден использовать .ftlh в качестве входного представления (с макросами) и другое .ftlh как представление обновления (со стандартным полем html и ${bike.bikeDirectBuy} для значений)?
Бонусный вопрос: с помощью Thymeleaf у меня была бы та же проблема? Я выбрал Freemarker только из-за прошлого опыта.