Макрос ввода Spring freemarker — используйте представление вставки в качестве представления обновления

#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 только из-за прошлого опыта.