[ 
https://issues.apache.org/jira/browse/WICKET-3166?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12932709#action_12932709
 ] 

Pedro Santos commented on WICKET-3166:
--------------------------------------

The currently isVisibleInHierarchy implementation has two recursion simple base 
cases:
- parent == null
- !parent.isVisibleInHierarchy()
Following this logic, the recursion will always stack up calls until test the 
component graph root node.
Why don't only change the mentioned form visitor to don't go deeper in 
components that are not visible?
HtmlHeaderContainer already has an similar iterator in the renderHeaderSections 
method.

> isVisibleInHierarchy() possibly unnecessarily checks children whose parents 
> are invisible?
> ------------------------------------------------------------------------------------------
>
>                 Key: WICKET-3166
>                 URL: https://issues.apache.org/jira/browse/WICKET-3166
>             Project: Wicket
>          Issue Type: Bug
>    Affects Versions: 1.4.13
>            Reporter: Martin Makundi
>            Assignee: Igor Vaynberg
>             Fix For: 1.4.14, 1.5-M4
>
>         Attachments: diff.txt, Wicket-Quickstart.zip
>
>   Original Estimate: 1h
>  Remaining Estimate: 1h
>
> Hi!
> See attached quickstart with junit test reproducing the bug. See also patch 
> proposal.
> I have a page with two panels:
> page.form.add(panel1);
> page.form.add(panel2);
> in some situations panel1 is not visible.
> However, a form submit event will visit all formcomponents of panel1 via:
>        at 
> org.apache.wicket.markup.html.form.FormComponent.visitFormComponentsPostOrder(FormComponent.java:400)
>        at 
> org.apache.wicket.markup.html.form.Form.visitFormComponentsPostOrder(Form.java:1209)
>        at org.apache.wicket.markup.html.form.Form.inputChanged(Form.java:1403)
>        at 
> org.apache.wicket.markup.html.form.Form.onFormSubmitted(Form.java:865)
> This results in a crash because panel1 components are not prepared to
> be invoked via isvisible when the panel itself is not visible.
> I wonder if the component.isVisibleInHierarchy could be changed as
> follows, to first check parent visibility:
>  public final boolean isVisibleInHierarchy()
>  {
>    Component component = this;
>    while (component != null)
>    {
>      Component componentParent = component.getParent();
>      if (((componentParent == null) ||
> componentParent.isVisibleInHierarchy()) &&
> component.determineVisibility())
>      {
>        component = componentParent;
>      }
>      else
>      {
>        return false;
>      }
>    }
>    return true;
>  }
> Similar change could/should maybe be possible also for isEnabledInHierarchy ?

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