Freemarker не видит передаваемые данные
Доброго времени суток.
Описание проблемы: Имеется html шаблон описанный с помощью freemarker (ниже представлена часть шаблона):
<#list products as product>
<tr data-productId="${product.id}">
<td>
<input size="40" value="${product.name}"/>
</td>
<td>
<input size="40" value="${product.quantity}"/>
</td>
<td>
<input size="40" value="${product.price}"/>
</td>
<td>
<input size="40" value="${product.discount}"/>
</td>
<td>
<button>Удалить</button>
</td>
</tr>
</#list>
Заполняется этот шаблон из контролера (Spring MVC) таким образом:
@GetMapping(value = "/products/init")
public String initProductsStoragePage(@ModelAttribute("model") ModelMap model) {
workLogger.info("GET /products/init");
ArrayList<Product> list = new ArrayList<>();
model.addAttribute("products", list);
return "storageProducts";
}
При заполнении шаблона получаю исключение:
freemarker.log._JULLoggerFactory$JULLogger.error Error executing FreeMarker template FreeMarker template error: The following has evaluated to null or missing: ==> products [in template "storageProducts.ftl" at line 25, column 20]
(В ошибке речь идет о строчке <#list products as product>, а именно о переменной products)
Версия Spring - 5.2.11.RELEASE
Версия Freemarker - 2.3.30
Вопрос: если я правильно понял, freemarker жалуется, что products является null или забыли передать атрибут с таким именем. Однако, как видно из кода контролера, такой сценарий исключается. Пожалуйста, скажите в чем может быть причина ошибки.
Ответы (1 шт):
Данная проблема может возникать если допущена ошибка в указании пути для сканирования ViewResolver. К примеру, если используете конфигурационный класс спринга, проверьте путь в аннотации @ComponentScan. Папка с темплейтами должна быть поддиректорией этого пути.