Delete a component

Hi,

What is the best way to delete a component and its generated code? I deleted a component using its xml file but then I ran into problems where other code reference it but it was not there.

Thanks,
Steve

Hi Steve,
Could you explain in more details what did you do and what errors do you have now?

So, this is the lay-out file from the sales tutorial.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<window xmlns="[url=http://schemas.haulmont.com/cuba/window.xsd]http://schemas.haulmont.com/cuba/window.xsd"[/url];
        caption="msg://browseCaption"
        class="com.company.sales.gui.customer.CustomerBrowse"
        focusComponent="customersTable"
        lookupComponent="customersTable"
        messagesPack="com.company.sales.gui.customer">
    <dsContext>
        <collectionDatasource id="customersDs"
                              class="com.company.sales.entity.Customer"
                              view="_local">
            <query>
                <![CDATA[select e from sales$Customer e]]>
            </query>
        </collectionDatasource>
    </dsContext>
    <layout expand="customersTable"
            spacing="true">
        <filter id="filter"
                applyTo="customersTable"
                datasource="customersDs">
            <properties include=".*"></properties>
        </filter>
        <table id="customersTable"
               width="100%">
            <actions>
                <action id="create"></action>
                <action id="edit"></action>
                <action id="remove"></action>
            </actions>
            <columns>
                <column id="name"/>
                <column id="email"/>
            </columns>
            <rows datasource="customersDs"></rows>
            <rowsCount></rowsCount>
            <buttonsPanel id="buttonsPanel"
                          alwaysVisible="true">
                <button id="createBtn"
                        action="customersTable.create"></button>
                <button id="editBtn"
                        action="customersTable.edit"></button>
                <button id="removeBtn"
                        action="customersTable.remove"></button>
            </buttonsPanel>
        </table>
    </layout>
</window>

======================
Now I delete the lay out, and the buttons…

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<window xmlns="[url=http://schemas.haulmont.com/cuba/window.xsd]http://schemas.haulmont.com/cuba/window.xsd"[/url];
        caption="msg://browseCaption"
        class="com.company.sales.gui.customer.CustomerBrowse"
        messagesPack="com.company.sales.gui.customer">
    <dsContext>
        <collectionDatasource id="customersDs"
                              class="com.company.sales.entity.Customer"
                              view="_local">
            <query>
                <![CDATA[select e from sales$Customer e]]>
            </query>
        </collectionDatasource>
    </dsContext>
</window>

==========
and this is the error I got…

java.lang.NullPointerException
	at com.haulmont.cuba.gui.xml.layout.loaders.ContainerLoader.createSubComponents(ContainerLoader.java:67)
	at com.haulmont.cuba.gui.xml.layout.loaders.WindowLoader.createComponent(WindowLoader.java:48)
	at com.haulmont.cuba.gui.xml.layout.LayoutLoader.createWindow(LayoutLoader.java:215)
	at com.haulmont.cuba.gui.WindowManager.createLayout(WindowManager.java:483)
	at com.haulmont.cuba.gui.WindowManager.createWindow(WindowManager.java:395)
	at com.haulmont.cuba.gui.WindowManager.openWindow(WindowManager.java:585)
	at com.haulmont.cuba.web.WebWindowManager.openWindow(WebWindowManager.java:123)
	at com.haulmont.cuba.gui.config.MenuCommand.execute(MenuCommand.java:100)
	at com.haulmont.cuba.web.sys.MenuBuilder$1.menuSelected(MenuBuilder.java:164)
	at com.vaadin.ui.MenuBar.changeVariables(MenuBar.java:207)
	at com.vaadin.server.communication.ServerRpcHandler.changeVariables(ServerRpcHandler.java:609)
	at com.vaadin.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:428)
	at com.vaadin.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:274)
	at com.vaadin.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:79)
	at com.haulmont.cuba.web.sys.CubaVaadinServletService$CubaUidlRequestHandler.lambda$synchronizedHandleRequest$92(CubaVaadinServletService.java:307)
	at com.haulmont.cuba.web.sys.CubaVaadinServletService.withUserSession(CubaVaadinServletService.java:189)
	at com.haulmont.cuba.web.sys.CubaVaadinServletService$CubaUidlRequestHandler.synchronizedHandleRequest(CubaVaadinServletService.java:307)
	at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:41)
	at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1409)
	at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:369)
	at com.haulmont.cuba.web.sys.CubaApplicationServlet.serviceAppRequest(CubaApplicationServlet.java:254)
	at com.haulmont.cuba.web.sys.CubaApplicationServlet.service(CubaApplicationServlet.java:163)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
	at com.haulmont.cuba.web.sys.CubaHttpFilter.handleNotFiltered(CubaHttpFilter.java:108)
	at com.haulmont.cuba.web.sys.CubaHttpFilter.doFilter(CubaHttpFilter.java:95)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1099)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:745)

Just keep the empty element in the screen, it is required.