Контейнеры данных и Загрузчики данных

Добрый день!

Реализую FileMultiUploadField но при загрузке файла он не появляется в таблице. Раньше это можно было решить вот так: filesDs.refresh(). Как реализовать с использованием загрузчиков и контейнеров?
Еще подскажите как делать правильно делать сложные запросы? При использовании datasource в дескрипторе можно было задавать запросы так: [CDATA[select e from daex$RPD e where e.expertiseRPD = :ds$expertiseDs]] и использовать один результат для другого запроса. В текущей документации нашел пример лишь при программном задании запросов.

Здравствуйте,

Перезагрузить данные вы можете воспользовавшись API DataLoader#load:

getScreenData().getLoader("loaderId").load();

Автоматическая подстановка параметров в запросы не была поддержана в новом API специально - теперь параметры нужно устанавливать явно.

Даниил

Использую getScreenData().getLoader("loaderId").load(); но запись в таблице после загрузки не появляется.

multiUploadField.addQueueUploadCompleteListener(queueUploadCompleteEvent -> {
for (Map.Entry<UUID, String> entry : multiUploadField.getUploadsMap().entrySet())
 {
   UUID fileId = entry.getKey();
   String fileName = entry.getValue();
   FileDescriptor fd = fileUploadingAPI.getFileDescriptor(fileId, fileName);
   try {
        fileUploadingAPI.putFileIntoStorage(fileId, fd);
   } catch (FileStorageException e) {
   throw new RuntimeException("Error saving file to FileStorage", e);
   }
   dataManager.commit(fd);
   }
   notifications.create()
        .withCaption("Файлы загружены: " + multiUploadField.getUploadsMap().values())
        .show();
   multiUploadField.clearUploads();
   //TODO: Обновление формы и источников
   getScreenData().getLoader("remarkAnswerDl").load();
});

Если добавлять в таблицу методом Add то запись появляется.

<data>
        <instance id="remarkAnswerDc"
                  class="com.company.daex.entity.RemarkAnswer"
                  view="remarkAnswer.Edit">
            <loader id="remarkAnswerDl"/>
            <collection id="filesRemarkAnswerDc" property="filesRemarkAnswer"/>
        </instance>
    </data>

А FileDescriptor после загрузки корректно сохраняется?

Да. Его потом можно найти во внешних файлах и через Add.

Заметил что не происходит сохранения в таблицу ссылок. Сам файл сохраняется корректно, но добавление записи файла в таблицу ссылок не происходит. При попытке сделать так:

getEditedEntity().getFilesRemarkAnswer().add(fd);

получаю NullPointer.
Можете подсказать что делаю не так?

Попробуйте работать с filesRemarkAnswerDc напрямую.

Если обращаться напрямую к filesRemarkAnswerDc то это Datasource или я ошибаюсь?

Не могли бы вы прислать лог ошибки?

filesRemarkAnswerDc

Это CollectionContainer связанный с редактируемой сущностью через свойство filesRemarkAnswer.

08:00:18.968 ERROR com.haulmont.cuba.web.log.AppLog        - Exception in com.haulmont.cuba.web.widgets.CubaFileUpload: 
com.vaadin.server.ServerRpcManager$RpcInvocationException: Unable to invoke method queueUploadFinished in com.haulmont.cuba.web.widgets.client.fileupload.CubaFileUploadServerRpc
	at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:157) ~[vaadin-server-8.6.4-11-cuba.jar:8.6.4-11-cuba]
	at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:115) ~[vaadin-server-8.6.4-11-cuba.jar:8.6.4-11-cuba]
	at com.vaadin.server.communication.ServerRpcHandler.handleInvocation(ServerRpcHandler.java:431) ~[vaadin-server-8.6.4-11-cuba.jar:8.6.4-11-cuba]
	at com.vaadin.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:396) ~[vaadin-server-8.6.4-11-cuba.jar:8.6.4-11-cuba]
	at com.vaadin.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:260) ~[vaadin-server-8.6.4-11-cuba.jar:8.6.4-11-cuba]
	at com.vaadin.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:82) ~[vaadin-server-8.6.4-11-cuba.jar:8.6.4-11-cuba]
	at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:40) ~[vaadin-server-8.6.4-11-cuba.jar:8.6.4-11-cuba]
	at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1577) ~[vaadin-server-8.6.4-11-cuba.jar:8.6.4-11-cuba]
	at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:425) ~[vaadin-server-8.6.4-11-cuba.jar:8.6.4-11-cuba]
	at com.haulmont.cuba.web.sys.CubaApplicationServlet.serviceAppRequest(CubaApplicationServlet.java:329) ~[cuba-web-7.0.6.jar:7.0.6]
	at com.haulmont.cuba.web.sys.CubaApplicationServlet.service(CubaApplicationServlet.java:215) ~[cuba-web-7.0.6.jar:7.0.6]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) ~[servlet-api.jar:na]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[catalina.jar:9.0.14]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[catalina.jar:9.0.14]
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-websocket.jar:9.0.14]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[catalina.jar:9.0.14]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[catalina.jar:9.0.14]
	at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:107) ~[spring-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:73) ~[spring-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at com.haulmont.cuba.web.sys.CubaHttpFilter.doFilter(CubaHttpFilter.java:108) ~[cuba-web-7.0.6.jar:7.0.6]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[catalina.jar:9.0.14]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[catalina.jar:9.0.14]
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199) ~[catalina.jar:9.0.14]
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) ~[catalina.jar:9.0.14]
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490) ~[catalina.jar:9.0.14]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) ~[catalina.jar:9.0.14]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[catalina.jar:9.0.14]
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:668) ~[catalina.jar:9.0.14]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[catalina.jar:9.0.14]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) ~[catalina.jar:9.0.14]
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408) ~[tomcat-coyote.jar:9.0.14]
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) ~[tomcat-coyote.jar:9.0.14]
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834) ~[tomcat-coyote.jar:9.0.14]
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1417) ~[tomcat-coyote.jar:9.0.14]
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-coyote.jar:9.0.14]
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-util.jar:9.0.14]
	at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]
Caused by: java.lang.reflect.InvocationTargetException: null
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
	at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
	at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:153) ~[vaadin-server-8.6.4-11-cuba.jar:8.6.4-11-cuba]
	... 38 common frames omitted
Caused by: com.vaadin.event.ListenerMethod$MethodException: Invocation of method queueUploadFinished in com.haulmont.cuba.web.gui.components.WebFileMultiUploadField$$Lambda$630/0x0000000100d77040 failed.
	at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:516) ~[vaadin-server-8.6.4-11-cuba.jar:8.6.4-11-cuba]
	at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:273) ~[vaadin-server-8.6.4-11-cuba.jar:8.6.4-11-cuba]
	at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:237) ~[vaadin-server-8.6.4-11-cuba.jar:8.6.4-11-cuba]
	at com.vaadin.server.AbstractClientConnector.fireEvent(AbstractClientConnector.java:1041) ~[vaadin-server-8.6.4-11-cuba.jar:8.6.4-11-cuba]
	at com.haulmont.cuba.web.widgets.CubaFileUpload.fireQueueUploadFinished(CubaFileUpload.java:496) ~[cuba-web-widgets-7.0.6.jar:na]
	at com.haulmont.cuba.web.widgets.CubaFileUpload$1.queueUploadFinished(CubaFileUpload.java:94) ~[cuba-web-widgets-7.0.6.jar:na]
	... 43 common frames omitted
Caused by: java.lang.NullPointerException: null
	at com.company.daex.web.remarkanswer.RemarkAnswerEdit.lambda$onInit$0(RemarkAnswerEdit.java:86) ~[app-web-0.5.2-SNAPSHOT.jar:na]
	at com.haulmont.bali.events.EventHub.publish(EventHub.java:170) ~[cuba-global-7.0.6.jar:7.0.6]
	at com.haulmont.cuba.web.gui.components.WebAbstractComponent.publish(WebAbstractComponent.java:88) ~[cuba-web-7.0.6.jar:7.0.6]
	at com.haulmont.cuba.web.gui.components.WebFileMultiUploadField.fireQueueUploadComplete(WebFileMultiUploadField.java:253) ~[cuba-web-7.0.6.jar:7.0.6]
	at com.haulmont.cuba.web.gui.components.WebFileMultiUploadField.lambda$initComponent$b6f02dbe$1(WebFileMultiUploadField.java:102) ~[cuba-web-7.0.6.jar:7.0.6]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
	at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
	at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:496) ~[vaadin-server-8.6.4-11-cuba.jar:8.6.4-11-cuba]
	... 48 common frames omitted
строка 85 FileDescriptor fdCommitted = dataManager.commit(fd);
строка 86 getEditedEntity().getFilesRemarkAnswer().add(fdCommitted);

Пробую сделать на другой таблице:

Screen screen = screenBuilders.lookup(Customer.class,this)
                .withSelectHandler(es->{
                    for (Customer item : es)
                    {
                        ExpertiseCustomerPDBuilder myClass = new ExpertiseCustomerPDBuilder();
                        myClass.setCustomer(item);
                        myClass.setExperise(getEditedEntity());
                        dataManager.commit(myClass);
                    }
                })
                .build()
                .show();

        screen.addAfterCloseListener(e->{
            expertiseCustomerPDBuildersDl.load();//1
            getScreenData().getLoader("expertiseCustomerPDBuildersDl")//2
        });

Как способ 1 так и способ 2 не обновляют таблицу!
Но если добавить еще одну запись в таблицу, добавится первая. Если переключить вкладки загрузится. Возможно не перерисовывается таблица? Или дело во вкладках?

Судя по коду и по ошибке, поле filesRemarkAnswer не ссылается ни на что (null), поэтому при попытке добавить элемент в коллекцию вы получаете NullPointerException.

Вам будет достаточно инжектировать collection контейнер в контроллер экрана и добавлять FileDescriptor'ы через него:

@Inject
protected FileMultiUploadField uploadField;
@Inject
protected CollectionPropertyContainer<FileDescriptor> filesDc;

@Subscribe("uploadField")
private void onUploadFieldQueueUploadComplete(FileMultiUploadField.QueueUploadCompleteEvent event) {
    if (getEditedEntity().getFiles() == null) {
        getEditedEntity().setFiles(new ArrayList<>());
    }

    for (Map.Entry<UUID, String> entry : uploadField.getUploadsMap().entrySet()) {
        // saving to storage is skipped

        filesDc.getMutableItems()
                .add(dataManager.commit(fd));
    }
}

Сделал вот так:

@Subscribe("multiUploadField")
    private void onMultiUploadFieldQueueUploadComplete(FileMultiUploadField.QueueUploadCompleteEvent event)
    {
        for (Map.Entry<UUID, String> entry : multiUploadField.getUploadsMap().entrySet())
        {
            UUID fileId = entry.getKey();
            String fileName = entry.getValue();
            FileDescriptor fd = fileUploadingAPI.getFileDescriptor(fileId, fileName);
            try {
                fileUploadingAPI.putFileIntoStorage(fileId, fd);
            } catch (FileStorageException e) {
                throw new RuntimeException("Error saving file to FileStorage", e);
            }

            filesDc.getMutableItems()
                    .add(dataManager.commit(fd));
        }

        notifications.create(Notifications.NotificationType.TRAY)
                .withCaption("Файлы загружены: " + multiUploadField.getUploadsMap().values())
                .show();
    }

и получаю вот такую ошибку:

16:22:44.520 ERROR com.haulmont.cuba.web.log.AppLog        - Exception in com.haulmont.cuba.web.widgets.CubaFileUpload: 
com.vaadin.server.ServerRpcManager$RpcInvocationException: Unable to invoke method queueUploadFinished in com.haulmont.cuba.web.widgets.client.fileupload.CubaFileUploadServerRpc
	at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:157) ~[vaadin-server-8.6.4-15-cuba.jar:8.6.4-15-cuba]
	at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:115) ~[vaadin-server-8.6.4-15-cuba.jar:8.6.4-15-cuba]
	at com.vaadin.server.communication.ServerRpcHandler.handleInvocation(ServerRpcHandler.java:431) ~[vaadin-server-8.6.4-15-cuba.jar:8.6.4-15-cuba]
	at com.vaadin.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:396) ~[vaadin-server-8.6.4-15-cuba.jar:8.6.4-15-cuba]
	at com.vaadin.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:260) ~[vaadin-server-8.6.4-15-cuba.jar:8.6.4-15-cuba]
	at com.vaadin.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:82) ~[vaadin-server-8.6.4-15-cuba.jar:8.6.4-15-cuba]
	at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:40) ~[vaadin-server-8.6.4-15-cuba.jar:8.6.4-15-cuba]
	at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1577) ~[vaadin-server-8.6.4-15-cuba.jar:8.6.4-15-cuba]
	at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:425) ~[vaadin-server-8.6.4-15-cuba.jar:8.6.4-15-cuba]
	at com.haulmont.cuba.web.sys.CubaApplicationServlet.serviceAppRequest(CubaApplicationServlet.java:329) ~[cuba-web-7.0.8.jar:7.0.8]
	at com.haulmont.cuba.web.sys.CubaApplicationServlet.service(CubaApplicationServlet.java:215) ~[cuba-web-7.0.8.jar:7.0.8]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) ~[servlet-api.jar:na]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[catalina.jar:9.0.14]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[catalina.jar:9.0.14]
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-websocket.jar:9.0.14]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[catalina.jar:9.0.14]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[catalina.jar:9.0.14]
	at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:107) ~[spring-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:73) ~[spring-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at com.haulmont.cuba.web.sys.CubaHttpFilter.doFilter(CubaHttpFilter.java:108) ~[cuba-web-7.0.8.jar:7.0.8]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[catalina.jar:9.0.14]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[catalina.jar:9.0.14]
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199) ~[catalina.jar:9.0.14]
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) ~[catalina.jar:9.0.14]
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490) ~[catalina.jar:9.0.14]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) ~[catalina.jar:9.0.14]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[catalina.jar:9.0.14]
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:668) ~[catalina.jar:9.0.14]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[catalina.jar:9.0.14]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) ~[catalina.jar:9.0.14]
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408) ~[tomcat-coyote.jar:9.0.14]
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) ~[tomcat-coyote.jar:9.0.14]
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834) ~[tomcat-coyote.jar:9.0.14]
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1417) ~[tomcat-coyote.jar:9.0.14]
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-coyote.jar:9.0.14]
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-util.jar:9.0.14]
	at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]
Caused by: java.lang.reflect.InvocationTargetException: null
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
	at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
	at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:153) ~[vaadin-server-8.6.4-15-cuba.jar:8.6.4-15-cuba]
	... 38 common frames omitted
Caused by: com.vaadin.event.ListenerMethod$MethodException: Invocation of method queueUploadFinished in com.haulmont.cuba.web.gui.components.WebFileMultiUploadField$$Lambda$637/0x0000000100d7fc40 failed.
	at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:516) ~[vaadin-server-8.6.4-15-cuba.jar:8.6.4-15-cuba]
	at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:273) ~[vaadin-server-8.6.4-15-cuba.jar:8.6.4-15-cuba]
	at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:237) ~[vaadin-server-8.6.4-15-cuba.jar:8.6.4-15-cuba]
	at com.vaadin.server.AbstractClientConnector.fireEvent(AbstractClientConnector.java:1041) ~[vaadin-server-8.6.4-15-cuba.jar:8.6.4-15-cuba]
	at com.haulmont.cuba.web.widgets.CubaFileUpload.fireQueueUploadFinished(CubaFileUpload.java:496) ~[cuba-web-widgets-7.0.8.jar:na]
	at com.haulmont.cuba.web.widgets.CubaFileUpload$1.queueUploadFinished(CubaFileUpload.java:94) ~[cuba-web-widgets-7.0.8.jar:na]
	... 43 common frames omitted
Caused by: java.lang.IllegalArgumentException: Null reference passed as parameter
	at com.haulmont.bali.util.Preconditions.checkNotNullArgument(Preconditions.java:88) ~[cuba-global-7.0.8.jar:7.0.8]
	at com.haulmont.cuba.gui.upload.FileUploading.uploadFileIntoStorage(FileUploading.java:240) ~[cuba-gui-7.0.8.jar:7.0.8]
	at com.haulmont.cuba.gui.upload.FileUploading.putFileIntoStorage(FileUploading.java:227) ~[cuba-gui-7.0.8.jar:7.0.8]
	at com.company.daex.web.rpdfile.RPDFileEdit.onMultiUploadFieldQueueUploadComplete(RPDFileEdit.java:120) ~[app-web-0.5.2-SNAPSHOT.jar:na]
	at com.haulmont.bali.events.EventHub.publish(EventHub.java:170) ~[cuba-global-7.0.8.jar:7.0.8]
	at com.haulmont.cuba.web.gui.components.WebAbstractComponent.publish(WebAbstractComponent.java:88) ~[cuba-web-7.0.8.jar:7.0.8]
	at com.haulmont.cuba.web.gui.components.WebFileMultiUploadField.fireQueueUploadComplete(WebFileMultiUploadField.java:253) ~[cuba-web-7.0.8.jar:7.0.8]
	at com.haulmont.cuba.web.gui.components.WebFileMultiUploadField.lambda$initComponent$b6f02dbe$1(WebFileMultiUploadField.java:102) ~[cuba-web-7.0.8.jar:7.0.8]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
	at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
	at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:496) ~[vaadin-server-8.6.4-15-cuba.jar:8.6.4-15-cuba]
	... 48 common frames omitted

строка с ошибкой fileUploadingAPI.putFileIntoStorage(fileId, fd);
что я делаю не так?

Не могли бы вы прислать тестовый проект, на котором воспроизводится проблема?

MUpload.zip (115.8 КБ)
Алгоритм:
Upload выбираем файлы - загружаем, все хорошо, файлы появились в списке.
Upload выбираем файлы - загружаем, получаем ошибку.

2 симпатии

Спасибо за предоставленный проект. Воспроизвести ошибку удалось.

Создал тикет по проблеме: GitHub

Проблема возникала из-за неправильного использования компонента. После каждой загрузки файлов необходим вызов multiUploadField.clearUploads()

Подскажите как лучше для обновления источника вызывать загрузчик с параметрами?
так:

expertiseCustomerIIBuildersDl.setParameter("expertiseID", getEditedEntity());
expertiseCustomerIIBuildersDl.load();

или так:

getScreenData().getLoader("loaderId").load();

Первый вариант. Во втором параметры вообще не проставляются ведь.