Enclosure is checking determineVisibility instead of isVisible on child 
component
---------------------------------------------------------------------------------

                 Key: WICKET-1579
                 URL: https://issues.apache.org/jira/browse/WICKET-1579
             Project: Wicket
          Issue Type: Bug
          Components: wicket
    Affects Versions: 1.3.3
            Reporter: Rahul Pilani


This problem is happening when Ajax requests are being used to update the 
visibility of child component of the Enclosure. 

Say originally we have an enclosure whose child component is not visible.

the following code will run and set visibilityAllowed on all the components 
under the enclosure to false.
onComponentTagBody - Line 188-198 from Enclosure.java
<code>
DirectChildTagIterator it = new DirectChildTagIterator(markupStream, openTag);
                MarkupContainer controllerParent = getEnclosureParent();
                while (it.hasNext())
                {
                        ComponentTag t = (ComponentTag)it.next();
                        Component child = controllerParent.get(t.getId());
                        if (child != null)
                        {
                                child.setVisibilityAllowed(isVisible());
                        }
                }
</code>

Then when an Ajax request sets the child component to visible, 
this is the code that checks the Enclosure's visibility:
onComponentTagBody -  Line 185 in Enclosure.java
<code>
                setVisible(controller.determineVisibility());
</code>

which calls the component's determineVisibility() method to determine if the 
component is visibile. But, determineVisiblity not only checks isVisible(), but 
other states as well, including isVisibilityAllowed()

determineVisibility , Line 4194 in Component.java
<code>
public final boolean determineVisibility()
        {
                return isVisible() && isRenderAllowed() && 
isVisibilityAllowed();
        }
</code>

Since the setVisibilityAllowed was set by the enclosure earlier, the 
determineVisibility method is going to return false no matter what the state of 
isVisible is, hence the Enclosure will never render.

Instead of calling determineVisibility, the enclosure should just call 
isVisible to determine whether it should render itself or not.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to