defect
minor
#29363
Missing validation of dialogs in GOTO statements to dialogs of invisible parents
If you open a local dialog from one component to another (e.g., using a GOTO) that is currently not visible, the dialog is not validated before rendering.
As a result, validation does not occur until the dialog is rendered, which leads to ERRORs in the log: The current thread is a rendering thread. Updates won't be evaluated.
java.lang.Exception: Stack trace.
at com.top_logic.layout.basic.AbstractControlBase.checkCommandThread(AbstractControlBase.java:707)
at com.top_logic.layout.basic.AbstractControlBase.requestRepaint(AbstractControlBase.java:655)
at com.top_logic.layout.toolbar.ToolbarControl.notifyToolbarGroupsChanged(ToolbarControl.java:106)
at com.top_logic.layout.toolbar.ToolBar$2.dispatch(ToolBar.java:71)
at com.top_logic.layout.toolbar.ToolBar$2.dispatch(ToolBar.java:1)
at com.top_logic.basic.listener.EventType.delegate(EventType.java:99)
at com.top_logic.basic.listener.PropertyObservableBase.internalNotifyListeners(PropertyObservableBase.java:228)
at com.top_logic.basic.listener.PropertyObservableBase.notifyListeners(PropertyObservableBase.java:201)
at com.top_logic.layout.toolbar.DefaultToolBar.insertGroup(DefaultToolBar.java:295)
at com.top_logic.layout.toolbar.DefaultToolBar.addGroup(DefaultToolBar.java:287)
at com.top_logic.layout.toolbar.DefaultToolBar.defineGroup(DefaultToolBar.java:249)
at com.top_logic.layout.table.DefaultTableData.addTableButtons(DefaultTableData.java:206)
at com.top_logic.layout.table.DefaultTableData.getViewModel(DefaultTableData.java:372)
at com.top_logic.layout.table.component.TableComponent.createTableData(TableComponent.java:1370)
at com.top_logic.layout.table.component.TableComponent.getTableData(TableComponent.java:1334)
at com.top_logic.layout.table.component.TableComponent.createTableControl(TableComponent.java:1134)
at com.top_logic.layout.table.component.TableComponent.getTableControl(TableComponent.java:1198)
at com.top_logic.layout.table.component.TableComponent.getRenderingControl(TableComponent.java:1193)
at com.top_logic.layout.structure.ContentControl.getView(ContentControl.java:170)
at com.top_logic.layout.structure.ContentControl.getScrolling(ContentControl.java:254)
at com.top_logic.layout.structure.AbstractLayoutControl.writeScrollingClass(AbstractLayoutControl.java:330)
at com.top_logic.layout.structure.ContentControl.writeScrollingClass(ContentControl.java:270)
at com.top_logic.layout.structure.AbstractLayoutControl.writeControlClassesContent(AbstractLayoutControl.java:274)
at com.top_logic.layout.structure.ContentControl.writeControlClassesContent(ContentControl.java:151)
at com.top_logic.layout.basic.AbstractControlBase.writeControlClasses(AbstractControlBase.java:420)
at com.top_logic.layout.basic.AbstractControlBase.writeControlAttributes(AbstractControlBase.java:405)
at com.top_logic.layout.structure.ContentControl.writeControlAttributes(ContentControl.java:114)
at com.top_logic.layout.basic.AbstractControlRenderer.writeControlTagAttributes(AbstractControlRenderer.java:56)
at com.top_logic.layout.layoutRenderer.ContentRenderer.writeControlTagAttributes(ContentRenderer.java:36)
at com.top_logic.layout.layoutRenderer.ContentRenderer.writeControlTagAttributes(ContentRenderer.java:1)
at com.top_logic.layout.DefaultControlRenderer.writeControl(DefaultControlRenderer.java:45)
at com.top_logic.layout.DefaultControlRenderer.write(DefaultControlRenderer.java:30)
at com.top_logic.layout.DefaultControlRenderer.write(DefaultControlRenderer.java:1)
at com.top_logic.layout.structure.AbstractLayoutControl.internalWrite(AbstractLayoutControl.java:259)
at com.top_logic.layout.basic.AbstractControlBase$ScopedRenderer.write(AbstractControlBase.java:1107)
at com.top_logic.layout.basic.AbstractControlBase$ScopedRenderer.write(AbstractControlBase.java:1)
at com.top_logic.layout.basic.AbstractDisplayContext.renderScoped(AbstractDisplayContext.java:118)
at com.top_logic.layout.basic.AbstractControlBase.write(AbstractControlBase.java:778)
at com.top_logic.layout.layoutRenderer.FixedFlowLayoutRenderer.writeLayoutChildren(FixedFlowLayoutRenderer.java:40)
at com.top_logic.layout.layoutRenderer.FlowLayoutRenderer.writeControlContents(FlowLayoutRenderer.java:37)
at com.top_logic.layout.layoutRenderer.FlowLayoutRenderer.writeControlContents(FlowLayoutRenderer.java:1)
at com.top_logic.layout.DefaultControlRenderer.writeControl(DefaultControlRenderer.java:52)
at com.top_logic.layout.DefaultControlRenderer.write(DefaultControlRenderer.java:30)
at com.top_logic.layout.DefaultControlRenderer.write(DefaultControlRenderer.java:1)
at com.top_logic.layout.structure.AbstractLayoutControl.internalWrite(AbstractLayoutControl.java:259)
at com.top_logic.layout.basic.AbstractControlBase$ScopedRenderer.write(AbstractControlBase.java:1107)
at com.top_logic.layout.basic.AbstractControlBase$ScopedRenderer.write(AbstractControlBase.java:1)
at com.top_logic.layout.basic.AbstractDisplayContext.renderScoped(AbstractDisplayContext.java:118)
at com.top_logic.layout.basic.AbstractControlBase.write(AbstractControlBase.java:778)
at com.top_logic.layout.layoutRenderer.FixedFlowLayoutRenderer.writeLayoutChildren(FixedFlowLayoutRenderer.java:40)
at com.top_logic.layout.layoutRenderer.FlowLayoutRenderer.writeControlContents(FlowLayoutRenderer.java:37)
at com.top_logic.layout.layoutRenderer.FlowLayoutRenderer.writeControlContents(FlowLayoutRenderer.java:1)
at com.top_logic.layout.DefaultControlRenderer.writeControl(DefaultControlRenderer.java:52)
at com.top_logic.layout.DefaultControlRenderer.write(DefaultControlRenderer.java:30)
at com.top_logic.layout.DefaultControlRenderer.write(DefaultControlRenderer.java:1)
at com.top_logic.layout.structure.AbstractLayoutControl.internalWrite(AbstractLayoutControl.java:259)
at com.top_logic.layout.basic.AbstractControlBase$ScopedRenderer.write(AbstractControlBase.java:1107)
at com.top_logic.layout.basic.AbstractControlBase$ScopedRenderer.write(AbstractControlBase.java:1)
at com.top_logic.layout.basic.AbstractDisplayContext.renderScoped(AbstractDisplayContext.java:118)
at com.top_logic.layout.basic.AbstractControlBase.write(AbstractControlBase.java:778)
at com.top_logic.html.template.ExpressionTemplate.renderValue(ExpressionTemplate.java:82)
at com.top_logic.layout.basic.WithPropertiesDelegateFactory$Getter.renderProperty(WithPropertiesDelegateFactory.java:275)
at com.top_logic.layout.basic.WithPropertiesDelegateFactory$Delegate.renderProperty(WithPropertiesDelegateFactory.java:194)
at com.top_logic.layout.basic.AbstractControlBase.renderProperty(AbstractControlBase.java:175)
at com.top_logic.html.template.VariableTemplate.write(VariableTemplate.java:42)
at com.top_logic.html.template.ConditionalTemplate.write(ConditionalTemplate.java:90)
at com.top_logic.html.template.TemplateSequence.write(TemplateSequence.java:42)
at com.top_logic.html.template.TagTemplate.write(TagTemplate.java:50)
at com.top_logic.html.template.config.HTMLTemplate.write(HTMLTemplate.java:79)
at com.top_logic.layout.layoutRenderer.DefaultCollapsibleRenderer.write(DefaultCollapsibleRenderer.java:36)
at com.top_logic.layout.layoutRenderer.DefaultCollapsibleRenderer.write(DefaultCollapsibleRenderer.java:1)
at com.top_logic.layout.structure.AbstractLayoutControl.internalWrite(AbstractLayoutControl.java:259)
at com.top_logic.layout.basic.AbstractControlBase$ScopedRenderer.write(AbstractControlBase.java:1107)
at com.top_logic.layout.basic.AbstractControlBase$ScopedRenderer.write(AbstractControlBase.java:1)
at com.top_logic.layout.basic.AbstractDisplayContext.renderScoped(AbstractDisplayContext.java:118)
at com.top_logic.layout.basic.AbstractControlBase.write(AbstractControlBase.java:778)
at com.top_logic.layout.layoutRenderer.DeckPaneRenderer.writeControlContents(DeckPaneRenderer.java:51)
at com.top_logic.layout.layoutRenderer.DeckPaneRenderer.writeControlContents(DeckPaneRenderer.java:1)
at com.top_logic.layout.DefaultControlRenderer.writeControl(DefaultControlRenderer.java:52)
at com.top_logic.layout.DefaultControlRenderer.write(DefaultControlRenderer.java:30)
at com.top_logic.layout.DefaultControlRenderer.write(DefaultControlRenderer.java:1)
at com.top_logic.layout.structure.AbstractLayoutControl.internalWrite(AbstractLayoutControl.java:259)
at com.top_logic.layout.basic.AbstractControlBase$ScopedRenderer.write(AbstractControlBase.java:1107)
at com.top_logic.layout.basic.AbstractControlBase$ScopedRenderer.write(AbstractControlBase.java:1)
at com.top_logic.layout.basic.AbstractDisplayContext.renderScoped(AbstractDisplayContext.java:118)
at com.top_logic.layout.basic.AbstractControlBase.write(AbstractControlBase.java:778)
at com.top_logic.base.services.simpleajax.DOMModification.writeChildrenAsXML(DOMModification.java:47)
at com.top_logic.base.services.simpleajax.ClientAction.writeAsXML(ClientAction.java:130)
at com.top_logic.layout.UpdateWriter.add(UpdateWriter.java:184)
at com.top_logic.layout.basic.AbstractControlBase.revalidateControl(AbstractControlBase.java:590)
at com.top_logic.layout.basic.AbstractControlBase.revalidate(AbstractControlBase.java:562)
at com.top_logic.layout.LocalScope$LocalScopeValidator.validate(LocalScope.java:183)
at com.top_logic.layout.LocalScope$LocalScopeValidator.validate(LocalScope.java:1)
at com.top_logic.layout.basic.AbstractDisplayContext.validateScoped(AbstractDisplayContext.java:131)
at com.top_logic.layout.basic.AbstractControlBase.revalidateControl(AbstractControlBase.java:607)
at com.top_logic.layout.basic.AbstractControlBase.revalidate(AbstractControlBase.java:562)
at com.top_logic.layout.LocalScope$LocalScopeValidator.validate(LocalScope.java:183)
at com.top_logic.layout.LocalScope$LocalScopeValidator.validate(LocalScope.java:1)
at com.top_logic.layout.basic.AbstractDisplayContext.validateScoped(AbstractDisplayContext.java:131)
at com.top_logic.layout.basic.AbstractControlBase.revalidateControl(AbstractControlBase.java:607)
at com.top_logic.layout.basic.AbstractControlBase.revalidate(AbstractControlBase.java:562)
at com.top_logic.layout.LocalScope$LocalScopeValidator.validate(LocalScope.java:183)
at com.top_logic.layout.LocalScope$LocalScopeValidator.validate(LocalScope.java:1)
at com.top_logic.layout.basic.AbstractDisplayContext.validateScoped(AbstractDisplayContext.java:131)
at com.top_logic.layout.basic.AbstractControlBase.revalidateControl(AbstractControlBase.java:607)
at com.top_logic.layout.basic.AbstractControlBase.revalidate(AbstractControlBase.java:562)
at com.top_logic.layout.LocalScope$LocalScopeValidator.validate(LocalScope.java:183)
at com.top_logic.layout.LocalScope$LocalScopeValidator.validate(LocalScope.java:1)
at com.top_logic.layout.basic.AbstractDisplayContext.validateScoped(AbstractDisplayContext.java:131)
at com.top_logic.layout.basic.AbstractControlBase.revalidateControl(AbstractControlBase.java:607)
at com.top_logic.layout.basic.AbstractControlBase.revalidate(AbstractControlBase.java:562)
at com.top_logic.layout.LocalScope$LocalScopeValidator.validate(LocalScope.java:183)
at com.top_logic.layout.LocalScope$LocalScopeValidator.validate(LocalScope.java:1)
at com.top_logic.layout.basic.AbstractDisplayContext.validateScoped(AbstractDisplayContext.java:131)
at com.top_logic.layout.basic.AbstractControlBase.revalidateControl(AbstractControlBase.java:607)
at com.top_logic.layout.basic.AbstractControlBase.revalidate(AbstractControlBase.java:562)
at com.top_logic.layout.LocalScope$LocalScopeValidator.validate(LocalScope.java:183)
at com.top_logic.layout.LocalScope$LocalScopeValidator.validate(LocalScope.java:1)
at com.top_logic.layout.basic.AbstractDisplayContext.validateScoped(AbstractDisplayContext.java:131)
at com.top_logic.layout.basic.AbstractControlBase.revalidateControl(AbstractControlBase.java:607)
at com.top_logic.layout.basic.AbstractControlBase.revalidate(AbstractControlBase.java:562)
at com.top_logic.layout.basic.ControlValidator.validate(ControlValidator.java:28)
at com.top_logic.layout.basic.ControlValidator.validate(ControlValidator.java:1)
at com.top_logic.layout.basic.AbstractDisplayContext.validateScoped(AbstractDisplayContext.java:131)
at com.top_logic.layout.structure.BrowserWindowControl.updateDialogs(BrowserWindowControl.java:589)
at com.top_logic.layout.structure.BrowserWindowControl.internalRevalidate(BrowserWindowControl.java:684)
at com.top_logic.layout.basic.AbstractControlBase$InternalRevalidator.validate(AbstractControlBase.java:1134)
at com.top_logic.layout.basic.AbstractControlBase$InternalRevalidator.validate(AbstractControlBase.java:1)
at com.top_logic.layout.basic.AbstractDisplayContext.validateScoped(AbstractDisplayContext.java:131)
at com.top_logic.layout.basic.AbstractControlBase.revalidateControl(AbstractControlBase.java:598)
at com.top_logic.layout.basic.AbstractControlBase.revalidate(AbstractControlBase.java:562)
at com.top_logic.layout.basic.component.ControlSupport.revalidateScoped(ControlSupport.java:120)
at com.top_logic.layout.basic.component.AJAXControlSupport.revalidateScoped(AJAXControlSupport.java:59)
at com.top_logic.layout.basic.component.ControlSupport$ControlSupportValidator.validate(ControlSupport.java:272)
at com.top_logic.layout.basic.component.ControlSupport$ControlSupportValidator.validate(ControlSupport.java:1)
at com.top_logic.layout.basic.AbstractDisplayContext.validateScoped(AbstractDisplayContext.java:131)
at com.top_logic.layout.basic.component.ControlSupport.revalidate(ControlSupport.java:104)
at com.top_logic.layout.basic.component.AJAXComponent.revalidate(AJAXComponent.java:45)
at com.top_logic.mig.html.layout.MainLayout.revalidate(MainLayout.java:1668)
at com.top_logic.mig.html.layout.RevalidationVisitor.visitAJAXComponent(RevalidationVisitor.java:146)
at com.top_logic.mig.html.layout.DefaultDescendingLayoutVisitor.visitLayoutContainer(DefaultDescendingLayoutVisitor.java:38)
at com.top_logic.mig.html.layout.DefaultDescendingLayoutVisitor.visitMainLayout(DefaultDescendingLayoutVisitor.java:45)
at com.top_logic.mig.html.layout.MainLayout.acceptVisitor(MainLayout.java:1663)
at com.top_logic.mig.html.layout.LayoutComponent.acceptVisitorRecursively(LayoutComponent.java:3964)
at com.top_logic.mig.html.layout.RevalidationVisitor.runValidation(RevalidationVisitor.java:214)
at com.top_logic.base.services.simpleajax.AJAXServlet.validate(AJAXServlet.java:748)
at com.top_logic.base.services.simpleajax.AJAXServlet.validate(AJAXServlet.java:717)
at com.top_logic.base.services.simpleajax.AJAXServlet.doPost(AJAXServlet.java:362)
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:653)
at com.top_logic.util.TopLogicServlet.doService(TopLogicServlet.java:402)
at com.top_logic.util.TopLogicServlet.inContext(TopLogicServlet.java:266)
at com.top_logic.util.TopLogicServlet$1.inContext(TopLogicServlet.java:334)
at com.top_logic.util.TLContextManager.inInteractionInternal(TLContextManager.java:283)
at com.top_logic.util.TLContextManager.inInteraction(TLContextManager.java:259)
at com.top_logic.util.TopLogicServlet.enterContext(TopLogicServlet.java:329)
at com.top_logic.util.TopLogicServlet.serviceWithLogMark(TopLogicServlet.java:183)
at com.top_logic.util.TopLogicServlet.lambda$0(TopLogicServlet.java:167)
at com.top_logic.util.TopLogicServlet.withSessionIdLogMark(TopLogicServlet.java:209)
at com.top_logic.util.TopLogicServlet.service(TopLogicServlet.java:166)
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:723)
at org.eclipse.jetty.ee10.servlet.ServletHolder$NotAsync.service(ServletHolder.java:1388)
at org.eclipse.jetty.ee10.servlet.ServletHolder.handle(ServletHolder.java:754)
at org.eclipse.jetty.ee10.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1622)
at com.top_logic.knowledge.gui.layout.HttpSecureHeaderFilter.doFilter(HttpSecureHeaderFilter.java:135)
at org.eclipse.jetty.ee10.servlet.FilterHolder.doFilter(FilterHolder.java:205)
at org.eclipse.jetty.ee10.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1594)
at org.eclipse.jetty.ee10.servlet.ServletHandler$MappedServlet.handle(ServletHandler.java:1556)
at org.eclipse.jetty.ee10.servlet.ServletChannel.dispatch(ServletChannel.java:871)
at org.eclipse.jetty.ee10.servlet.ServletChannel.handle(ServletChannel.java:449)
at org.eclipse.jetty.ee10.servlet.ServletHandler.handle(ServletHandler.java:469)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:546)
at org.eclipse.jetty.ee10.servlet.SessionHandler.handle(SessionHandler.java:719)
at org.eclipse.jetty.server.handler.ContextHandler.handle(ContextHandler.java:1226)
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:178)
at org.eclipse.jetty.server.Server.handle(Server.java:197)
at org.eclipse.jetty.server.internal.HttpChannelState$HandlerInvoker.run(HttpChannelState.java:788)
at org.eclipse.jetty.server.internal.HttpConnection.onFillable(HttpConnection.java:420)
at org.eclipse.jetty.server.internal.HttpConnection$FillableCallback.succeeded(HttpConnection.java:1809)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
at org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:54)
at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:492)
at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.epcRunTask(AdaptiveExecutionStrategy.java:428)
at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:401)
at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:255)
at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.run(AdaptiveExecutionStrategy.java:204)
at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:317)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:1009)
at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1240)
at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1194)
at java.lang.Thread.run(Thread.java:840)
The cause of this is Ticket #28742. Previously, the dialog’s parent was made visible before the actual GOTO, which then led to the dialog being validated. This is no longer the case.