1

使用 RapidClipse,我构建了一个包含三个元素的页面。
一个下拉字段,一个 XdevTable 和一个 XDevfieldGroup。
下拉字段由数据库表内容填充(正常工作)
从下拉字段中选择值后应填充表(正常工作)
从 XDevTable 中选择值后,相关行应可由字段组。

在表中选择一行后,我得到一个空指针异常:

Mai 27, 2019 4:41:19 PM com.vaadin.server.DefaultErrorHandler doDefault
    SCHWERWIEGEND: 
    java.lang.NullPointerException
at
com.xdev.ui.entitycomponent.table.AbstractBeanTable.getSelectedItem(AbstractBeanTable.java:180)
at com.xdev.ui.masterdetail.FieldGroupMasterDetailConnection.lambda$0(FieldGroupMasterDetailConnection.java:64)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:510)
at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:200)
at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:163)
at com.vaadin.server.AbstractClientConnector.fireEvent(AbstractClientConnector.java:1015)
at com.vaadin.ui.AbstractField.fireValueChange(AbstractField.java:1161)
at com.vaadin.ui.AbstractField.setValue(AbstractField.java:571)
at com.vaadin.ui.AbstractSelect.setValue(AbstractSelect.java:735)
at com.vaadin.ui.AbstractField.setValue(AbstractField.java:468)
at com.vaadin.ui.AbstractSelect.changeVariables(AbstractSelect.java:547)
at com.vaadin.ui.Table.changeVariables(Table.java:2933)
at com.vaadin.server.communication.ServerRpcHandler.changeVariables(ServerRpcHandler.java:616)
at com.vaadin.server.communication.ServerRpcHandler.handleInvocation(ServerRpcHandler.java:463)
at com.vaadin.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:406)
at com.vaadin.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:273)
at com.vaadin.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:90)
at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:41)
at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1435)
at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:380)
at com.xdev.communication.XdevServlet.service(XdevServlet.java:212)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
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:52)
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:199)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:660)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:798)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:808)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)

如果我是对的,我假设存在识别表中选择的项目的泄漏。
但我仍然做了 RapidClipse Training 中描述的内容/方式。
所以表和字段组之间的连接是由表内的“ConnectedForm”属性完成的。

从下拉字段到表格的连接通过以下代码完成:

private void comboBox_valueChange(final Property.ValueChangeEvent event) {

    try {

        Integer varMainClass = 0;
        varMainClass = this.comboBox.getSelectedItem().getBean().getId();

        Notification.show("Kuck a mole: ", this.comboBox.getSelectedItem().getBean().getGroupName()
                , Notification.Type.ERROR_MESSAGE);

        final BeanItemContainer<TGroup> mySubClasses = new BeanItemContainer<>(TGroup.class);
        mySubClasses.addAll(new TGroupDAO().getAllSubClassByMainClassId(varMainClass));
        this.table.setContainerDataSource(mySubClasses);
        this.table.setVisibleColumns("id", "groupName");
        this.table.setVisible(true);
    } catch (final Exception e) {
        e.printStackTrace();
        final String stackTrace = Throwables.getStackTraceAsString(e);
        this.textAreaErr.setValue(stackTrace);
        this.textAreaErr.setVisible(true);
        Notification.show("Do isch was falsch, Nachricht: ", e.getMessage(), Notification.Type.ERROR_MESSAGE);

    }

}


在表事件中 valueChange 只是用于测试目的的通知:

private void table_valueChange(final Property.ValueChangeEvent event) {
    Notification.show("Kuck a mole: ", this.table.getSelectedItem().getBean().getGroupName()
            , Notification.Type.ERROR_MESSAGE);

}
All help would be appreciated
Thanks in advance
4

1 回答 1

1

我很高兴,因为我在朋友的帮助下找到了解决方案!

这仍然是我的错(正如预期的那样:-))。我使用了错误的容器类型:
我使用了:

            final BeanItemContainer<TGroup> mySubClasses = new BeanItemContainer<>(TGroup.class);

但它是错误的容器!
我应该改用:

final XdevBeanItemContainer<TGroup> mySubClasses = new XdevBeanItemContainer<>(TGroup.class);

在我改变它之后,一切正常。
我还在文档中搜索了如何在未来防止这种情况的提示,但没有成功。

于 2019-05-28T14:13:37.117 回答