Web client rendering errors

I’m getting internal errors in the browser (all browsers) which show in the log as page rendering errors. The log shows…

2007-10-28 08:50	http-8080-3	ERROR	com.servoy.j2db.util.Debug	Error rendering the page contacts_card
org.apache.wicket.WicketRuntimeException: Cannot modify component hierarchy during render phase
 
     at org.apache.wicket.Component.checkHierarchyChange(Component.java:2879) 
     at org.apache.wicket.MarkupContainer.remove(MarkupContainer.java:522) 
     at org.apache.wicket.MarkupContainer.addedComponent(MarkupContainer.java:901) 
     at org.apache.wicket.MarkupContainer.add(MarkupContainer.java:151) 
     at com.servoy.j2db.server.headlessclient.dataui.WebTabPanel.onBeforeRender(Unknown Source) 
     at org.apache.wicket.Component.beforeRender(Component.java:846) 
     at org.apache.wicket.MarkupContainer.onBeforeRenderChildren(MarkupContainer.java:1472) 
     at org.apache.wicket.Component.beforeRender(Component.java:856) 
     at org.apache.wicket.MarkupContainer.onBeforeRenderChildren(MarkupContainer.java:1472) 
     at org.apache.wicket.Component.beforeRender(Component.java:856) 
     at org.apache.wicket.MarkupContainer.onBeforeRenderChildren(MarkupContainer.java:1472) 
     at org.apache.wicket.Component.beforeRender(Component.java:856) 
     at org.apache.wicket.MarkupContainer.onBeforeRenderChildren(MarkupContainer.java:1472) 
     at org.apache.wicket.Component.beforeRender(Component.java:856) 
     at org.apache.wicket.MarkupContainer.onBeforeRenderChildren(MarkupContainer.java:1472) 
     at org.apache.wicket.Component.beforeRender(Component.java:856) 
     at org.apache.wicket.MarkupContainer.onBeforeRenderChildren(MarkupContainer.java:1472) 
     at org.apache.wicket.Component.beforeRender(Component.java:856) 
     at org.apache.wicket.MarkupContainer.onBeforeRenderChildren(MarkupContainer.java:1472) 
     at org.apache.wicket.Component.beforeRender(Component.java:856) 
     at org.apache.wicket.MarkupContainer.onBeforeRenderChildren(MarkupContainer.java:1472) 
     at org.apache.wicket.Component.beforeRender(Component.java:856) 
     at org.apache.wicket.MarkupContainer.onBeforeRenderChildren(MarkupContainer.java:1472) 
     at org.apache.wicket.Component.beforeRender(Component.java:856) 
     at org.apache.wicket.Page.renderPage(Page.java:885) 
     at org.apache.wicket.protocol.http.WebRequestCycle.redirectTo(WebRequestCycle.java:164) 
     at org.apache.wicket.request.target.component.PageRequestTarget.respond(PageRequestTarget.java:59) 
     at org.apache.wicket.request.AbstractRequestCycleProcessor.respond(AbstractRequestCycleProcessor.java:103) 
     at org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1037) 
     at org.apache.wicket.RequestCycle.step(RequestCycle.java:1107) 
     at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1176) 
     at org.apache.wicket.RequestCycle.request(RequestCycle.java:499) 
     at org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:257) 
     at org.apache.wicket.protocol.http.WicketServlet.doGet(WicketServlet.java:126) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:689) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) 
     at sun.reflect.GeneratedMethodAccessor253.invoke(Unknown Source) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:585) 
     at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:244) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at javax.security.auth.Subject.doAsPrivileged(Subject.java:517) 
     at org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:276) 
     at org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:162) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:283) 
     at org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:56) 
     at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:189) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:185) 
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230) 
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) 
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) 
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104) 
     at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563) 
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261) 
     at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) 
     at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581) 
     at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) 
     at java.lang.Thread.run(Thread.java:613) 

2007-10-28 08:50	http-8080-3	ERROR	org.apache.wicket.RequestCycle	Cannot modify component hierarchy during render phase
org.apache.wicket.WicketRuntimeException: Cannot modify component hierarchy during render phase 
     at org.apache.wicket.Component.checkHierarchyChange(Component.java:2879) 
     at org.apache.wicket.MarkupContainer.remove(MarkupContainer.java:522) 
     at org.apache.wicket.MarkupContainer.addedComponent(MarkupContainer.java:901) 
     at org.apache.wicket.MarkupContainer.add(MarkupContainer.java:151) 
     at com.servoy.j2db.server.headlessclient.dataui.WebTabPanel.onBeforeRender(Unknown Source) 
     at org.apache.wicket.Component.beforeRender(Component.java:846) 
     at org.apache.wicket.MarkupContainer.onBeforeRenderChildren(MarkupContainer.java:1472) 
     at org.apache.wicket.Component.beforeRender(Component.java:856) 
     at org.apache.wicket.MarkupContainer.onBeforeRenderChildren(MarkupContainer.java:1472) 
     at org.apache.wicket.Component.beforeRender(Component.java:856) 
     at org.apache.wicket.MarkupContainer.onBeforeRenderChildren(MarkupContainer.java:1472) 
     at org.apache.wicket.Component.beforeRender(Component.java:856) 
     at org.apache.wicket.MarkupContainer.onBeforeRenderChildren(MarkupContainer.java:1472) 
     at org.apache.wicket.Component.beforeRender(Component.java:856) 
     at org.apache.wicket.MarkupContainer.onBeforeRenderChildren(MarkupContainer.java:1472) 
     at org.apache.wicket.Component.beforeRender(Component.java:856) 
     at org.apache.wicket.MarkupContainer.onBeforeRenderChildren(MarkupContainer.java:1472) 
     at org.apache.wicket.Component.beforeRender(Component.java:856) 
     at org.apache.wicket.MarkupContainer.onBeforeRenderChildren(MarkupContainer.java:1472) 
     at org.apache.wicket.Component.beforeRender(Component.java:856) 
     at org.apache.wicket.MarkupContainer.onBeforeRenderChildren(MarkupContainer.java:1472) 
     at org.apache.wicket.Component.beforeRender(Component.java:856) 
     at org.apache.wicket.MarkupContainer.onBeforeRenderChildren(MarkupContainer.java:1472) 
     at org.apache.wicket.Component.beforeRender(Component.java:856) 
     at org.apache.wicket.Page.renderPage(Page.java:885) 
     at org.apache.wicket.protocol.http.WebRequestCycle.redirectTo(WebRequestCycle.java:164) 
     at org.apache.wicket.request.target.component.PageRequestTarget.respond(PageRequestTarget.java:59) 
     at org.apache.wicket.request.AbstractRequestCycleProcessor.respond(AbstractRequestCycleProcessor.java:103) 
     at org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1037) 
     at org.apache.wicket.RequestCycle.step(RequestCycle.java:1107) 
     at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1176) 
     at org.apache.wicket.RequestCycle.request(RequestCycle.java:499) 
     at org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:257) 
     at org.apache.wicket.protocol.http.WicketServlet.doGet(WicketServlet.java:126) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:689) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) 
     at sun.reflect.GeneratedMethodAccessor253.invoke(Unknown Source) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:585) 
     at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:244) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at javax.security.auth.Subject.doAsPrivileged(Subject.java:517) 
     at org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:276) 
     at org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:162) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:283) 
     at org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:56) 
     at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:189) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:185) 
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230) 
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) 
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) 
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104) 
     at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563) 
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261) 
     at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) 
     at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581) 
     at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) 
     at java.lang.Thread.run(Thread.java:613)

This happens when loading a foundset from one form into another based on the same table. The weird thing is that I do exactly the same thing with the same foundset via a different route and it works fine - all the forms being used work OK in web client because there is at least one route that gets me there without errors. There is one ‘unknown source’ error in the above…

at sun.reflect.GeneratedMethodAccessor253.invoke(Unknown Source) 

…don’t know if this gives anyone a clue as to what is going on?

The code to load the records is

var a = application.getMethodTriggerFormName();
var b = forms[a].controller.getTableName();

//store current record index in set
var n = forms[a].controller.getSelectedIndex();

var m = b+'_card';//target form

if (forms[m])
{	
	if (globals.popup_flag ==1) globals.closeAllFormDialogs();//close dialog before moving!
	forms[m].controller.showRecords(forms[a].foundset);
	forms[m].controller.setSelectedIndex(n);
}
else
{
	application.beep();
	plugins.dialogs.showErrorDialog( 'Form missing',  'There is no card form for this item!', 'OK')
}

(Although the code above refers to the form ‘contacts_card’ I am getting the same error for many other forms.)

At the same time I sometimes (not always) get multiple errors… ```
Shouldn’t happen that the trigger element names are empty, is this called in a script that is triggered by solution startup?

... but I can't see any un-named elements on any of the forms in question!

It all works fine in smart client!

Fixed :D

This has taken 2 days to track down but finally I’ve found the problem - there was an element on the navigator form that was overlapping the edge. Having removed this element, all the forms now work correctly in web client. What is strange is that the element didn’t always cause an issue - some forms that use the same navigator would work fine and others wouldn’t :?