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?