Search code examples
javaxmlfreemarker

FreeMarker : diplay tag on condition without if block


I am looking for a way to avoid using this in a FreeMarker template :

<#if getName()??>
    <Name>getName()</Name>
</#if>

Because I need to test many things.

Is there any way to do it by using, for example, a parameter in the tag? I don't want the tag to be written at all if the value is null. (So exclamation mark is not enough)


Solution

  • If all your tags follow the same basic structure:

    <Tag>value</Tag>
    

    you can use a macro, to save yourself some typing:

    <#macro optional tag value=[]>
        <#if value?has_content>
             <${tag}>${value}</${tag}>
        </#if>
    </#macro>
    

    and then apply it like this:

      <@optional tag='User' value=user/> 
      <@optional tag='Name' value=name/>
    

    resulting in the following output code:

      <User>myuser</User>
      <Name>myname</User>
    

    if one of the properties is not defined the whole tag will be omitted from the output.