[ https://issues.apache.org/jira/browse/WICKET-3166?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12931876#action_12931876 ]
Martin Makundi commented on WICKET-3166: ---------------------------------------- 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 > 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.