Row selection event of Composition Table: Exception

I have a 2 level composition screen where

  1. MaterialIssueCustomer is Parent Entity, 2) MaterialIssueCustomerLine is Composition screen and 3) MaterialIssueCustomerLineBatch is the composition Entity of The MaterialIssueCustomerLine.

The screen looks like as follows:

29%20AM

I want to reload Data Container of MaterialBatch for the Table 3 MaterialIssueCustomerLineBatchTable for selection by the user. This MaterialBatch is loaded with the parameter “material” from the selected row of the table 2 MaterialIssueCustomerLineTable.

I have tried this in the controller:

 @Subscribe("materialIssueCustomerLineTable")
    public void onMaterialIssueCustomerLineTableSelection(Table.SelectionEvent<MaterialIssueCustomerLine> e) {
        MaterialIssueCustomerLine customerLine = (MaterialIssueCustomerLine) e.getSelected();
        materialBatchesDl.setParameters(ParamsMap.of("material", customerLine.getMaterial()));
        materialBatchesDl.load();
    }

But getting the following exception:

java.lang.ClassCastException: java.util.Collections$SingletonSet cannot be cast to com.company.entity.mm.MaterialIssueCustomerLine
at com.company.web.mm.materialissuecustomer.MaterialIssueCustomerEdit.onMaterialIssueCustomerLineTableSelection(MaterialIssueCustomerEdit.java:192)
at com.haulmont.bali.events.EventHub.publish(EventHub.java:170)
at com.haulmont.cuba.web.gui.components.WebAbstractComponent.publish(WebAbstractComponent.java:92)
at com.haulmont.cuba.web.gui.components.WebAbstractTable.fireSelectionEvent(WebAbstractTable.java:1123)
at com.haulmont.cuba.web.gui.components.WebAbstractTable.tableSelectionChanged(WebAbstractTable.java:1111)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:496)
at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:273)
at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:237)
at com.vaadin.server.AbstractClientConnector.fireEvent(AbstractClientConnector.java:1041)
at com.haulmont.cuba.web.widgets.CubaTable.fireValueChange(CubaTable.java:974)
at com.vaadin.v7.ui.AbstractField.setValue(AbstractField.java:553)
at com.vaadin.v7.ui.AbstractSelect.setValue(AbstractSelect.java:745)
at com.vaadin.v7.ui.AbstractField.setValue(AbstractField.java:450)
at com.vaadin.v7.ui.AbstractSelect.changeVariables(AbstractSelect.java:553)
at com.vaadin.v7.ui.Table.changeVariables(Table.java:2943)
at com.haulmont.cuba.web.widgets.CubaTable.changeVariables(CubaTable.java:327)
at com.vaadin.server.communication.ServerRpcHandler.changeVariables(ServerRpcHandler.java:611)
at com.vaadin.server.communication.ServerRpcHandler.handleInvocation(ServerRpcHandler.java:457)
at com.vaadin.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:400)
at com.vaadin.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:260)
at com.vaadin.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:82)
at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:40)
at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1577)
at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:425)
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:741)
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:107)
at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:73)
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:200)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:836)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1747)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)

Thanks for suggesting what should be the right approach to solve this problem.

It is the problem in your code. Do not cast selected set to instance. getSelected always returns Set<E>.

Thanks @jreznot, worked

     @Subscribe("bankTranLineTable")
    public void onBankTranLineTableSelection(Table.SelectionEvent<BankTranLine> event) {
        BankTranLine tranLine = event.getSource().getSingleSelected();
        accountsDs.setItem(tranLine.getAccount());
        accountsDs.refresh();
    }