Sebastian Hoffmann
Sebastian Hoffmann

Reputation: 11482

Facelets: ui:param default value

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?

Upvotes: 10

Views: 10730

Answers (3)

Martin
Martin

Reputation: 41

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}" />

Upvotes: 2

rbento
rbento

Reputation: 11608

Could use this:

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

I hope it helps.

Upvotes: 14

Sebastian Hoffmann
Sebastian Hoffmann

Reputation: 11482

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.

Upvotes: 9

Related Questions