if, else, elseif - FreeMarker Manual

- Home
- Manual
- Java API

- Contribute
- Report a Bug
- Download

Manual
Previous Next

# if, else, elseif

## Synopsis

    <#if condition>
      ...
    <#elseif condition2>
      ...
    <#elseif condition3>
      ...
    ...
    <#else>
      ...
    </#if>

Where:

- `condition`, `condition2`, ...etc.: Expression evaluates to a boolean value.

The `elseif`-s and the `else` are optional.

## Description

You can use `if`, `elseif` and `else` directives to conditionally skip a section of the template. The `condition`-s must evaluate to a boolean value, or else an error will abort template processing. The `elseif`-s and `else`-s must occur inside `if` (that is, between the `if` start-tag and end-tag). The `if` can contain any number of `elseif`-s (including 0) and at the end optionally one `else`. Examples:

`if` with 0 `elseif` and no `else`:

    <#if x == 1>
      x is 1
    </#if>

`if` with 0 `elseif` and `else`:

    <#if x == 1>
      x is 1
    <#else>
      x is not 1
    </#if>

`if` with 2 `elseif` and no `else`:

    <#if x == 1>
      x is 1
    <#elseif x == 2>
      x is 2
    <#elseif x == 3>
      x is 3
    </#if>

`if` with 3 `elseif` and `else`:

    <#if x == 1>
      x is 1
    <#elseif x == 2>
      x is 2
    <#elseif x == 3>
      x is 3
    <#elseif x == 4>
      x is 4
    <#else>
      x is not 1 nor 2 nor 3 nor 4
    </#if>

To see more about boolean expressions, see: Template Author's Guide/The Template/Expressions.

You can nest `if` directives (of course):

    <#if x == 1>
      x is 1
      <#if y == 1>
        and y is 1 too
      <#else>
        but y is not
      </#if>
    <#else>
      x is not 1
      <#if y < 0>
        and y is less than 0
      </#if>
    </#if>

Note:

When you want to test if `x > 0` or `x >= 0`, writing `<#if x > 0>` and `<#if x >= 0>` is WRONG, as the first `>` will close the `#if` tag. To work that around, write `<#if x gt 0>` or `<#if gte 0>`. Also note that if the comparison occurs inside parentheses, you will have no such problem, like `<#if foo.bar(x > 0)>` works as expected.

Previous Next