c (when used with boolean)
This built-in exists since FreeMarker 2.3.20.
This built-in converts a boolean to string for a
"computer language" as opposed to for human audience.
The result will be "true"
or
"false"
, regardless of the
boolean_format
setting. When generating
JavaScript and such, this should be used, as otherwise changing the
boolean_format
can break the generated
computer-language output.
Note that this built-in also works on strings.
string (when used with a boolean value)
All usages of this built-in has been deprecated; see below.
Converts a boolean to a string. You can use it in two ways:
-
As
foo?string("yes", "no")
: Deprecated starting from FreeMarker 2.3.23: use?then("yes", "no")
instead. This will return the first parameter (here:"yes"
) if the boolean is true, otherwise the second parameter (here:"no"
). Note that the return value is always a string; if the parameters were numbers, they would be converted to strings first. Also note that both parameters are evaluated, despite that only one of them will be used; this might have negative impact if the parameters aren't just literals. -
foo?string
: Deprecated starting from FreeMarker 2.3.20: use?c
instead, or set theboolean_format
setting to something like"yes,no"
and then the conversion can happen automatically. If you still need to know about this, this will convert the boolean to string using the default strings for representing true and false values. By default, true is rendered as"true"
and false is rendered as"false"
. This is mostly useful if you generate source code with FreeMarker (but use?c
for that starting from 2.3.20), since the values are not locale (language, country) sensitive. To change these default strings, you can use theboolean_format
setting.Note, that in the very rare case when a value is multi-typed and is both a boolean and a string, then the string value of the variable will be returned, and so the
boolean_format
setting will have no effect.
then
This built-in exists since FreeMarker 2.3.23.
Used like
booleanExp?then(whenTrue,
whenFalse)
, fills the same role
as the ternary operator in C-like languages (i.e.,
booleanExp ?
whenTrue :
whenFalse
). If
booleanExp
evaluates
to boolean true then it evaluates and returns its first argument, or
else if booleanExp
evaluates to boolean false then it evaluates and return its second
argument. Off course, all three expression can be arbitrary complex.
The argument expressions can have any type, even different
types.
An important special property of this built-in is that only one of the argument expressions will be evaluated. This is unlike with normal method calls, where all argument expressions are evaluated, regardless if the method will need them. This also means that the argument that's not needed can even refer to missing variables without causing error. (It still can't be syntactically invalid of course.)
Example:
<#assign foo = true> ${foo?then('Y', 'N')} <#assign foo = false> ${foo?then('Y', 'N')} <#assign x = 10> <#assign y = 20> <#-- Prints 100 plus the maximum of x and y: --> ${100 + (x > y)?then(x, y)}
Y N 120
If you need to choose based on a non-boolean value, you
should use the switch
built-in instead of nesting multiple
then
-s into each other, like
priority?switch(1, "low", 2, "medium", 3,
"high")
, or even true?switch(priority <= 1,
"low", priority == 2, "medium", priority >= 3,
"high")
.