Looking @ the exception "PropertyNotFoundException - Bean: Rectangle,
property: radius", I can say that your EL for "rendered" does'nt work
correctly. It is looking for "radius" in  "Rectangle".

HIH.

Balaji

-----Original Message-----
From: Venkat Rao [mailto:[EMAIL PROTECTED]
Sent: Tuesday, 1 August 2006 2:43 AM
To: 'MyFaces Discussion'
Subject: "rendered" condition does not work as expected

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;
    }
}


This correspondence is for the named persons only.
It may contain confidential or privileged information or both.
No confidentiality or privilege is waived or lost by any mis transmission.
If you receive this correspondence in error please delete it from your system 
immediately and notify the sender.
You must not disclose, copy or relay on any part of this correspondence, if you 
are not the intended recipient.
Any opinions expressed in this message are those of the individual sender 
except where the sender expressly,
and with the authority, states them to be the opinions of the Department of 
Emergency Services, Queensland.

Reply via email to