Ошибка: ClassCastException ...cannot be cast to com.haulmont.cuba.gui.screen.compatibility.LegacyFrame

error Добрый день!
Подскажите, пожалуйста, в чем может быть проблема?
Есть внутри-строчный редактор записи и в нем поле PickerField.
Когда открывается внутристрочный редактор и если на лупе для PickerFiald кликнуть, то формируется ошибка:

java.lang.ClassCastException: com.sweethill.orderstore.web.screens.customer.CustomerEdit cannot be cast to com.haulmont.cuba.gui.screen.compatibility.LegacyFrame
at com.haulmont.cuba.gui.components.PickerField$OpenAction.actionPerform(PickerField.java:723)
at com.haulmont.cuba.web.gui.components.WebPickerField.lambda$setPickerButtonAction$0(WebPickerField.java:340)
at com.haulmont.cuba.web.widgets.CubaButton.fireClick(CubaButton.java:76)
at com.vaadin.ui.Button$1.click(Button.java:57)
at sun.reflect.GeneratedMethodAccessor197.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:153)
at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:115)
at com.vaadin.server.communication.ServerRpcHandler.handleInvocation(ServerRpcHandler.java:431)
at com.vaadin.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:396)
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:1578)
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: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:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:526)
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:861)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1579)
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)

Добрый день,
Вы пытаетесь использовать устаревший PickerField.OpenAction в новом экране, написанном на новом API экранов. Этот экшен не поддерживает новые экраны, в коде даже есть пометка:

    @Deprecated
    OpenAction addOpenAction(); // todo do not use in new screens

Спасибо за ответ.
Я не пытаюсь использовать “устаревший” PickerField.
screen содержит:





Какого-либо программного кода по выбору из ссылочного поля посредством PickerField я не делал. Равно как addOpenAction не использовал.
Собственно, есть только , который сам создает поле для выбора во внутри-строчном редакторе самого dataGrid. Повторюсь, сам код для выбора из этого поля я не создаю.

image

image

Пожалуйста используйте тройные “backticks” для разметки кода.

Хорошо.
Как такового кода нет.
Есть форма xml на первой картинке.
И объявление реквизита в модели. Все остальное, как я понимаю/, делает внутри-строчный редактор.

Вы в своем втором ответе использовали xml код (я вижу, т.к. админ), но этот код не отображается, движок его режет. Пожалуйста, ну попробуйте использовать тройные backticks, ну никто же не видит что вы там написали )

1 симпатия

Простите, я не знал этих особенностей.

                                      editorEnabled="true"
                                      dataContainer="addressesDC"
                                      width="100%" height="350px">
                                <actions>
                                    <action id="create" type="create"/>
                                    <action id="edit" type="edit"/>
                                    <action id="remove" type="remove"/>
                                </actions>
                                <columns>
                                    <column property="address" width="400"/>
                                    <column property="addressType" width="300px"/>
                                </columns>
                                <rowsCount/>
                                <buttonsPanel id="buttonsPanel"
                                              alwaysVisible="true">
                                    <button id="createBtn"
                                            action="addresses_Table.create" caption="mainMsg://ButtonCreate"/>
                                    <button id="editBtn"
                                            action="addresses_Table.edit"/>
                                    <button id="removeBtn"
                                            action="addresses_Table.remove"/>
                                </buttonsPanel>
                            </dataGrid>
    @NotNull
    @Lookup(type = LookupType.SCREEN, actions = {"lookup", "open", "clear"})
    @ManyToOne(fetch = FetchType.LAZY, optional = false)
    @JoinColumn(name = "ADDRESS_TYPE")
    protected AddressTypes addressType;

Добрый день!

Не могли бы Вы приложить код экрана, который должен быть открыт и уточнить версию платформы?

С уважением,
Глеб

Добрый день!
Загрузил. Версия платформы 7.2.6.

CustomerEdit.java (5.1 КБ) customer-edit.xml (4.6 КБ)

открыться должен экран:
AddressTypesBrowse.java (394 Байта)
address-types-browse.xml (1.6 КБ)

Спасибо за приложенные файлы, но OpenAction открывает экран редактирования, а не просмотра. Т.к. экран просмотра написан с использованием нового API, предположу, что экран редактирования так же написан на новом API. Исходя из этого, проверьте содержимое файлов web-screens.xml, screens.xml (если присутствует). Если в них есть описание открываемого экрана, то его нужно удалить, т.к. “новые” экраны регистрируются с помощью аннотации @UiController. Если регистрация экрана в screens.xml присутствует, то такой экран считается legacy, из за чего возникает ClassCastException, т.к. по факту он не является legacy.

Глеб

Спасибо за информацию.

srceens.xml в проекте нет.

В файле web-screens.xml тоже данных экранов нет.
web-screens.xml (348 Байт)

Спасибо, что сообщили о проблеме, завел тикет на GitHub.

Глеб