10
votes

How can one define a default value for a facelet template parameter? Consider the following element using a template parameter:

<h:outputText value="#{templParam}"></h:outputText>

The above line will print the the template parameter templParam which is passed by a ui:param tag in a ui:composition using the template:

<ui:param name="templParam" value="Hello world"></ui:param>

But if ui:param tag is missing nothing will be printed. Although, how can one print e.g "Default value" in this case?

3

3 Answers

14
votes

Could use this:

<h:outputText value="#{empty templParam ? 'Default value' : templParam}" />

I hope it helps.

9
votes

A default value can be defined by using a ternary operator checking for null value.

<h:outputText value="#{templParam != null ? templParam : 'Default value'}"></h:outputText>

This will print "Default value" if the parameter was not passed by a ui:param tag.

2
votes

After the composition tag to define the start of the template, the template parameter can be set to its default value (if it is empty) so that all following uses of it don't require checking for a null each time (and its default value is in one place in the code).

<html xmlns:c="http://java.sun.com/jsp/jstl/core" >

<ui:composition>
    <c:set var="templParam" value="#{empty templParam ? 'Default value' : templParam}"
           scope="request" />
    <h:outputText value="Use 1: #{templParam}" />
    <h:outputText value="Use 2: #{templParam}" />