In this post I would like to highlight a small pitfall that sometimes spoils ADF/JSF developers lives. It happens when an EL expression on a page is referring to a boolean property of a managed bean or an object and a getter for this property is declared in a wrong way. This leads to either PropertyNotFound or PropertyNotReadable exceptions.
Let's consider a simple example. There is a managed bean with the following methods:
There is a page with a couple of buttons referring to the he managed bean:
The thing is that the EL engine can't resolve a getter starting with "is" for the Boolean type returning an object. It works only for the primitive boolean type.
If we change the second getter like this:
Let's consider a simple example. There is a managed bean with the following methods:
public boolean isPrimitiveValue() { return true; } public Boolean isObjectValue() { return Boolean.TRUE; }
<af:button text="button 1" id="b1" rendered="#{theBean.primitiveValue}"/> <af:button text="button 2" id="b2" rendered="#{theBean.objectValue}"/>It works well for the first button, but it doesn't for the second one raising a PropertyNotFound exception like "...The class 'com.cs.adfpractice.view.TheBean' does not have the property 'objectValue'...".
The thing is that the EL engine can't resolve a getter starting with "is" for the Boolean type returning an object. It works only for the primitive boolean type.
If we change the second getter like this:
public Boolean getObjectValue() { return Boolean.TRUE; }
It will work perfect.
That's it!
That's it!