Search code examples
jsfel

How does EL empty operator work in JSF?


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?


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.