Unable to hide breadcrumbs on single screen

Hello,

I’ve created a single screen that is self-referencing, meaning I pass the data entered in the form to the same screen class via ScreenBuilders. This screen creates a trail of breadcrumbs that keeps expanding. I would like to eliminate this behavior on this screen only.

I found this post which provides the method for doing so, but I continue to receive NullPointerException errors whenever I attempt to interact with windowContainer.getBreadCrumbs().

This screen class that I’m using extends only Screen. I also attempted different OpenMode options from the ScreenBuilders API, but didn’t seem to get differing results.

Is there a way to either explicitly hide the breadcrumbs altogether without errors or stop them from continuing to build when the user builds a new ScreenBuilders object on top of the same screen?

Thank you,
Adam

Hi,

It seems that you’re using appWindowMode=SINGLE that why you cannot get TabbedWindowContainer. The complete code that handles both modes are as follows:

@Subscribe
public void onInit(final InitEvent event) {
    Screen rootScreen = screens.getOpenedScreens().getRootScreenOrNull();
    if (rootScreen != null) {
        Component workAreaComponent = rootScreen.getWindow().getComponent("workArea");
        if (workAreaComponent instanceof AppWorkArea) {
            if (((AppWorkArea) workAreaComponent).getMode() == AppWorkArea.Mode.SINGLE) {
                CubaSingleModeContainer singleWindowContainer = ((WebAppWorkArea) workAreaComponent).getSingleWindowContainer();
                TabWindowContainer windowContainer = ((TabWindowContainer) singleWindowContainer.getWindowContainer());
                windowContainer.getBreadCrumbs().setVisible(false);
            } else {
                TabSheetBehaviour tabSheet = ((WebAppWorkArea) workAreaComponent).getTabbedWindowContainer().getTabSheetBehaviour();
                TabWindowContainer windowContainer = (TabWindowContainer) tabSheet.getSelectedTab();
                windowContainer.getBreadCrumbs().setVisible(false);
            }
        }
    }
}

Regards,
Gleb

Hi Gleb,

Thanks for the reply. I’m still getting NullPointerException, though.

Stacktrace

java.lang.NullPointerException
	at com.company.bxjfp.web.screens.createbarcode.CreateBarcode.onInit(CreateBarcode.java:74)
	at com.haulmont.bali.events.EventHub.publish(EventHub.java:170)
	at com.haulmont.cuba.gui.screen.Screen.fireEvent(Screen.java:128)
	at com.haulmont.cuba.gui.screen.UiControllerUtils.fireEvent(UiControllerUtils.java:60)
	at com.haulmont.cuba.web.sys.WebScreens.createScreen(WebScreens.java:262)
	at com.haulmont.cuba.web.sys.WebScreens.create(WebScreens.java:179)
	at com.haulmont.cuba.gui.config.MenuItemCommands$ScreenCommand.run(MenuItemCommands.java:319)
	at com.haulmont.cuba.web.sys.MenuBuilder$MenuCommandExecutor.accept(MenuBuilder.java:256)
	at com.haulmont.cuba.web.sys.MenuBuilder$MenuCommandExecutor.accept(MenuBuilder.java:241)
	at com.haulmont.cuba.web.gui.components.mainwindow.WebAppMenu$MenuItemImpl.menuSelected(WebAppMenu.java:435)
	at com.vaadin.ui.MenuBar.changeVariables(MenuBar.java:225)
	at com.vaadin.server.communication.ServerRpcHandler.changeVariables(ServerRpcHandler.java:616)
	at com.vaadin.server.communication.ServerRpcHandler.handleInvocation(ServerRpcHandler.java:468)
	at com.vaadin.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:411)
	at com.vaadin.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:275)
	at com.vaadin.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:83)
	at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:40)
	at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1636)
	at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:465)
	at com.haulmont.cuba.web.sys.CubaApplicationServlet.serviceAppRequest(CubaApplicationServlet.java:329)
	at com.haulmont.cuba.web.sys.CubaApplicationServlet.service(CubaApplicationServlet.java:215)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:108)
	at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:74)
	at com.haulmont.cuba.web.sys.CubaHttpFilter.doFilter(CubaHttpFilter.java:93)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.base/java.lang.Thread.run(Thread.java:834)

The line it’s indicating is in the TabSheetBehaviour block:

Ideas?

Thanks again,
Adam

Please, attach a small demo project that reproduces the problem. For me, the code above works.

Gleb