Я познакомился с FreeMarker, движком шаблонов для Java.
Я дошел до того, что смог передать объект в движок шаблонов через Hash Map. Это работает хорошо. Но как только я пытаюсь передать любой набор множественных объектов во FreeMarker, он дает мне исключение freemarker.template.TemplateException и жалуется, что он "Ожидаемая коллекция или последовательность. Задания оцениваются вместо freemarker.template.SimpleHash".
Из того, что я понимаю, читая об этом в различных ресурсах, этого следовало ожидать.
Теперь, я проделал большую часть работы на ногах и нашел несколько людей, комментирующих, как это обойти. Но, откровенно говоря, (а) для многих примеров было неясно, как именно их рекомендации применимы в моем случае - хотя я уже давно знаком с основами Java, я довольно новичок в некоторых архитектурах относящиеся к веб-приложениям на Java и (b) я не понимаю, какой из подходов был наилучшим.
Все, что я хочу сделать, на самом упрощенном уровне, в основном это:
У меня есть простой сервлет.
У меня есть простой класс (для этого примера с именем Invoice) с несколькими методами и свойствами.
Я хочу, чтобы мой сервлет (каким-то образом) представлял список / массив / последовательность / хэш-карту экземпляров этих объектов (или представлений этих объектов) с помощью метода процесса FreeMarker.
Я хочу, чтобы мой шаблон .ftl делал цикл по списку / массиву / sequence / hashmap и отображал результаты метода, что-то вроде этого:
< # list invoices as invoice>
Invoice note: ${invoice.getNote()}, Invoice Amount:${invoice.getAmount()}
< / # list>
Теперь я не обязательно ищу быстрое и грязное решение для этого. Я новичок в FreeMarker, но я хочу сделать это надлежащим образом, это элегантный и хороший дизайн. Так что я готов полностью переосмыслить этот подход. Может ли кто-нибудь помочь мне понять, что мне нужно сделать, чтобы что-то подобное заработало?