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 шт):

Автор решения: Ivan

Данная проблема может возникать если допущена ошибка в указании пути для сканирования ViewResolver. К примеру, если используете конфигурационный класс спринга, проверьте путь в аннотации @ComponentScan. Папка с темплейтами должна быть поддиректорией этого пути.

→ Ссылка