You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by "Igor Vaynberg (JIRA)" <ji...@apache.org> on 2008/04/30 02:26:55 UTC

[jira] Resolved: (WICKET-1579) Enclosure is checking determineVisibility instead of isVisible on child component

     [ https://issues.apache.org/jira/browse/WICKET-1579?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Igor Vaynberg resolved WICKET-1579.
-----------------------------------

    Resolution: Won't Fix
      Assignee: Igor Vaynberg

enclosures are not supported with ajax

> 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
>            Assignee: Igor Vaynberg
>
> 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.