2009-10-02 7 views
8

W szablonie freemarker Chcę poszerzyć zmienną logiczną na ciąg tak:Rozwiń zmienną logiczną do napisu „true” lub „false”

<#assign booleanVar = "test".isEmpty() /> 
state: ${booleanVar} <#-- this throws an exception! --> 

To jest to, co chcę dostać jako wyjście :

state: false 

jedynym sposobem znalazłem się osiągnąć ten cel już jest:

state: <#if booleanVar>true<#else>false</#if> 

Czy istnieje łatwiejszy sposób to zrobić?

Odpowiedz

20
booleanVar?string("true", "false") 

Chociaż true/false is default, więc

booleanVar?string 

powinny działać prawidłowo.

+0

Jeśli to zrobię, otrzymam: "freemarker.core.InvalidReferenceException: wyrażenie booleanVar $ string jest niezdefiniowane". – tangens

+0

Ponownie przeczytam ten link ... Zmieniono $ na? w przykładzie. Nie wiem, freemarker :) – tsilb

+1

Począwszy od FreeMarker 2.3.20, powinieneś użyć '$ {booleanVar? C}'. Napisanie '$ {booleanVar? String}' jest niebezpieczne, ponieważ domyślny format może zostać zmieniony. Zobacz moją odpowiedź, aby uzyskać więcej informacji. – ddekany

4

Począwszy od FreeMarker 2.3.20, jeśli chcesz wydrukować true/false (ponieważ generujesz JavaScript lub takie), napisz ${booleanVar?c} (?c dla "formatu komputera", również dla liczb). ${booleanVar?string} jest niebezpieczne, że skoro ktoś może wybrać ustawienie boolean_format do yes,no czy coś ... (BTW, w tym przypadku będzie działać zbyt ${booleanVar} w 2.3.20, a otrzymasz yes i no.)

Patrz: http://freemarker.org/docs/ref_builtins_boolean.html#ref_builtin_c_boolean

Powiązane problemy