How does EL empty operator work in JSF?

el, jsf

Solution

From EL 5.0 specification:

1.11 Empty Operator - `empty A`

The `empty` operator is a prefix operator that can be used to determine if a value is null or empty.

To evaluate `empty A`

- If `A` is `null`, return `true`

- Otherwise, if `A` is the empty string, then return `true`

- Otherwise, if `A` is an empty array, then return `true`

- Otherwise, if `A` is an empty `Map`, return `true`

- Otherwise, if `A` is an empty `Collection`, return `true`

- Otherwise return `false`

So, considering the interfaces, it works on `Collection` and `Map` only. In your case, I think `Collection` is the best option. Or, if it's a Javabean-like object, then `Map`. Either way, under the covers, the `isEmpty()` method is used for the actual check. On interface methods which you can't or don't want to implement, you could throw `UnsupportedOperationException`.

Problem

In JSF an component can be rendered or not using the EL empty operator ``` rendered="#{not empty myBean.myList}" ``` As I've understood the operator works both as null-check, but also check checks if the list is empty. I want to do empty checks on some objects of my own custom class, which interface(s) or parts of interfaces do I need to implement? Which interface is the empty operator compatible with?

Original source