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
         Attachments: Wicket-Quickstart.zip

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