You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by "Craig McIlwee (JIRA)" <ji...@apache.org> on 2009/02/12 23:48:59 UTC

[jira] Commented: (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:comment-tabpanel&focusedCommentId=12673081#action_12673081 ] 

Craig McIlwee commented on WICKET-1579:
---------------------------------------

Igor, can you add that restriction to the javadoc please?

> 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.