Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I display a message if a jsf datatable is empty?

Tags:

java

jsf

Using JSF1.2, if my datatable binding returns no rows I want to display a message saying so.

How do I do that?

And for extra points - how do I hide the table completly if it's empty?

Thanks.

like image 741
blank Avatar asked Dec 31 '09 14:12

blank


2 Answers

Make use of the rendered attribute. It accepts a boolean expression. You can evaluate the datatable's value inside the expression with help of the EL's empty keyword. If it returns false, the whole component (and its children) won't be rendered.

<h:outputText value="Table is empty!" rendered="#{empty bean.list}" />

<h:dataTable value="#{bean.list}" rendered="#{not empty bean.list}">
    ...
</h:dataTable>

For the case you're interested, here are other basic examples how to make use of the EL powers inside the rendered attribute:

<h:someComponent rendered="#{bean.booleanValue}" />
<h:someComponent rendered="#{bean.intValue gt 10}" />
<h:someComponent rendered="#{bean.objectValue eq null}" />
<h:someComponent rendered="#{bean.stringValue ne 'someValue'}" />
<h:someComponent rendered="#{not empty bean.collectionValue}" />
<h:someComponent rendered="#{not bean.booleanValue and bean.intValue ne 0}" />
<h:someComponent rendered="#{bean.enumValue eq 'ONE' or bean.enumValue eq 'TWO'}" />

See also:

  • Java EE 7 tutorial - Expression Language - Operators
like image 191
BalusC Avatar answered Nov 13 '22 23:11

BalusC


You can test this in several ways, for example by having a function in a bean that tests the list size:

function boolean isEmpty() {
    return myList.isEmpty();
}

then in the JSF pages :

<h:outputText value="List is empty" rendered="#{myBean.empty}"/>

<h:datatable ... rendered="#{!myBean.empty}">
...
</h:datatable>
like image 2
Romain Linsolas Avatar answered Nov 13 '22 23:11

Romain Linsolas