Макрос Freemarker с логической переменной - PullRequest
0 голосов
/ 20 апреля 2020

Я использую Freemarker 2.3.28 в приложении Spring и Freemarker. У меня проблема с получением логических значений, работающих с макросами freemarker.

Я получаю JSON со стороны сервера, который имеет один атрибут как логический (проверяется с помощью функции JS typeof). Я помещаю эти данные в шаблон, используя:

<script id="data-template" type="text/x-handlebars-template">
   <@customData var1="{{var_id}}" var2="{{var_label}}" var3="{{var_enabled}}" />
</script>

var3 в этом выражении приходит как логическое значение, которое я хочу использовать для некоторого выражения флажка, чтобы сделать его отмеченным или не отмеченным.

Теперь, когда я использую это как макрос-выражение следующим образом, он не выбирает var3 как логическое значение:

<#macro customData var1 var2 var3>   
   <div class="checkbox">
      <label><input type="checkbox" ${var3?string('checked="true"', ''} />Dummy Label</label>
   </div>
</#macro>

Я получаю ошибку при использовании? String:

FreeMarker template error:
For "...(...)" callee: Expected a method, but this has evaluated to a string (wrapper: f.t.SimpleScalar):
==> var3?string 

Если Я использую? Тогда выдает ошибку:

FreeMarker template error:
For "?then(...)" left-hand operand: Expected a boolean, but this has evaluated to a string (wrapper: f.t.SimpleScalar):
==> var3 

1 Ответ

0 голосов
/ 20 апреля 2020

Полагаю, FreeMarker оценивается раньше, чем части {{...}}, поэтому макрос FreeMarker буквально получает "{{var_id}}", что является строковым литералом. Таким образом, базовый c подход к решению проблемы кажется неправильным.

Кроме того, даже если Handlebars оценивается первым, вы получаете такие вещи, как var3="true", который снова является строковым литералом в FreeMarker, потому что кавычек вокруг него.

...