Hah.. actually there is an unnecessary recursion in the proposal. The while-loop is no longer needed if parent is already called.
** Martin 2010/11/14 Martin Makundi <martin.maku...@koodaripalvelut.com>: > Hi! > > The fix I proposed does fix the probelm at hand but it makes page > rendering tremendeously slow due to the recursion: > > > Component componentParent = component.getParent(); > > is a recursive call that will be called O(n^n) times in hierarcy. > > > Something else must be proposed to fix this? The isEnabledInHierarchty > uses a caching mechanism. Maybe this will also need to cache the > "isparentvisible" at each level thus avoiding O(n^n) recursion. > > Any suggestions how to speed it up? > > ** > Maritin > > > > 2010/11/13 Martin Makundi <martin.maku...@koodaripalvelut.com>: >> Hi! >> >> Created jira issue at https://issues.apache.org/jira/browse/WICKET-3166 >> >> 2010/11/12 Martin Makundi <martin.maku...@koodaripalvelut.com>: >>> Hi! >>> >>> I have a page with two panels: >>> >>> page.add(panel1); >>> page.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 >>> ? >>> >>> Comments? >>> >>> ** >>> Martin >>> >> >