Skip to main content

How to Store Variables in JSF Facelets
07 September 2015

JSF Facelets can store the returned value yielded from a call to an EJB. Doing so will mean the EJB does less work.

Let's say you are implementing a Facelet that will display a message stating something like 'No results' when a collection is empty. If the collection is not empty, the Facelet will call the EJB a second time. First to calculate the size of the collection; second to display the data in the collection etc.

Here is an example:

    [...]

    <ui:fragment rendered="#{pages.all().size() == 0}" >
        <h:outputText value="No pages yet." />
    </ui:fragment>
                
    <ui:fragment rendered="#{pages.all().size() > 0}" >
        <h:dataTable value="#{pages.all()}" var="page">
            [...]
        </h:dataTable>
    </ui:fragment>

    [...]

In the example above the Facelet calls the EJB three times. First to calculate the size of the collection; second to display the elements the data table will occupy; third the data from the collection.

How to Store Values in JSF Facelets

The calling to the EJB can be reduced to just once per page render. Calling the backing bean using the ui:param JSF element will store the returned value in a variable.

<f:metadata>
   <ui:param name="pageSet" value="#{pages.all()}" />
</f:metadata>

Using the ui:param JSF element, here is an improved example:

    [...]

    <f:metadata>
      <ui:param name="pageSet" value="#{pages.all()}" />
    </f:metadata>

    [...]

    <ui:fragment rendered="#{pageSet.size() == 0}" >
        <h:outputText value="No pages yet." />
    </ui:fragment>
                
    <ui:fragment rendered="#{pageSet.size() > 0}" >
        <h:dataTable value="#{pageSet}" var="page">
            [...]
        </h:dataTable>
    </ui:fragment>

    [...]

I hope this helps.

Mailing List


Responsive Media

With the ResponsiveMedia plugin for Joomla it is easy to add 3rd party content from YouTube, Vimeo, and Instagram right in to any Joomla! article.

ResponsiveMedia