Корень проблемы в том, что security.authentication
должна быть не директивой FreeMarker, а функцией или методом FreeMarker. Директивы не имеют возвращаемого значения (поэтому вы не можете использовать их вместо выражения, как вы это сделали). Директивы могут выводить на печать (помимо прочего), но это всего лишь «побочный эффект», а не возвращаемое значение. Функции / методы FreeMarker имеют возвращаемое значение. Но если интеграция Spring не обеспечивает тот же вызов, что и функция / метод (проверьте это), то лучшее, что вы можете сделать, это уродливый обходной путь:
<#assign capturedOutput><@security.authentication property='principal.userAccount.administratedVendors'/></#assign>
<#if capturedOutput == '[]'>
<a href="/my-accounts">My Accounts</a>
</#if>
В теории это немного хрупко, поскольку (я думаю) principal.userAccount
просто печатает toString()
объекта значения свойства. В то время как для большинства List
реализаций, которые возвращают "[]"
для пустого списка, это не гарантируется Java API.