My code inside a "rendered" flag is getting
invoked even when the condition
is false. I am iterating over a list of Graphics objects to
display
information about each by calling the object specific
methods. The code
works fine if I use only <h:outputText>. If I use
<h:inputText> however, the
rendered property does not seem to be taking effect.
<ui:repeat var="graphicsObj"
value="#{gfx.graphicsObjList}">
<h:panelGroup rendered="#{graphicsObj.objType
== 'circle'}" >
[Circle] Radius: <h:outputText
value="#{graphicsObj.radius}"/>
</h:panelGroup>
<h:panelGroup rendered="#{graphicsObj.objType
== 'rectangle'}" >
[Rectangle] Length: <h:outputText
value="#{graphicsObj.length}"/>
</h:panelGroup>
</ui:repeat>
The above works fine, as expected. However, if I change from
<h:outputText>
to <h:inputText>, it complains :
javax.faces.el.PropertyNotFoundException: /graphics.xhtml
24,54
value="#{graphicsObj.radius}": Bean: Rectangle,
property: radius
So, the first block of code is getting executed for a
Rectangle object when
using a <h:inputText> but not when using
<h:outputText>.
Any help in solving the problem is appreciated. The code for
the Circle and
Rectangle beans is given below:
public class Circle implements Serializable
{
public String getObjType() {
return "circle";
}
int radius;
public void setRadius(int radius) {
this.radius = radius;
}
public int getRadius() {
return this.radius;
}
}
public class Rectangle implements Serializable
{
public String getObjType() {
return "rectangle";
}
private int length;
public void setLength(int length) {
this.length = length;
}
public int getLength() {
return this.length;
}
}
|