Ошибка при открытии экрана деталей сущности с динамическим атрибутом высотой более одной строки

Доброго дня!

Если у сущности есть динамический атрибут типа Строка и для него указана высота более одной строки, то при открытии экрана деталей, на котором размещен компонент экрана соответствующий динамическому атрибуту(TextArea), возникает ошибка. Если высота не указана или равна одному, то экран деталей и соответствующий компонент(TextField) Динамического атрибута работают корректно.

Динамические атрибуты из аддона совместимости “jmix-cuba”.

Воспроизведение

Предусловие: в проекте присутствует аддон совместимости и отсутствует аддон Динамических атрибутов.

  1. Добавить Сущности динамический атрибут типа Строка;
  2. Указать “Количество строк” больше 1;
  3. Разместить Динамический атрибут на экране деталей Сущности;
  4. Сохранить и применить изменения Динамического атрибута;
  5. Открыть экран деталей Сущности, где размещен Динамический атрибут.

ОР: Экран деталей открылся, на экране отображается компонент динамического атрибута, сообщения об ошибках отсутствуют.
ФР: Появилось сообщение об ошибке, экран деталей не открылся.

Стэктрейс
java.lang.ClassCastException: class io.jmix.ui.component.impl.TextAreaImpl cannot be cast to class com.haulmont.cuba.gui.components.TextArea (io.jmix.ui.component.impl.TextAreaImpl and com.haulmont.cuba.gui.components.TextArea are in unnamed module of loader 'app')
	at com.haulmont.cuba.gui.dynamicattributes.CubaDynAttrComponentGenerationStrategy.createStringField(CubaDynAttrComponentGenerationStrategy.java:165)
	at io.jmix.dynattrui.impl.factory.DynAttrComponentGenerationStrategy.createDatatypeField(DynAttrComponentGenerationStrategy.java:160)
	at io.jmix.dynattrui.impl.factory.DynAttrComponentGenerationStrategy.createComponentInternal(DynAttrComponentGenerationStrategy.java:127)
	at io.jmix.dynattrui.impl.factory.DynAttrComponentGenerationStrategy.createComponent(DynAttrComponentGenerationStrategy.java:110)
	at io.jmix.ui.component.UiComponentsGenerator.generate(UiComponentsGenerator.java:51)
	at io.jmix.dynattrui.impl.FormEmbeddingStrategy.addAttributeComponent(FormEmbeddingStrategy.java:79)
	at io.jmix.dynattrui.impl.FormEmbeddingStrategy.embed(FormEmbeddingStrategy.java:52)
	at io.jmix.dynattrui.impl.BaseEmbeddingStrategy.embed(BaseEmbeddingStrategy.java:79)
	at io.jmix.dynattrui.DynAttrEmbeddingStrategies.embedAttributes(DynAttrEmbeddingStrategies.java:38)
	at io.jmix.dynattrui.facet.DynAttrFacetProvider.lambda$loadFromXml$0(DynAttrFacetProvider.java:59)
	at io.jmix.ui.component.ComponentsHelper.__walkThroughComponent(ComponentsHelper.java:272)
	at io.jmix.ui.component.ComponentsHelper.__walkComponents(ComponentsHelper.java:252)
	at io.jmix.ui.component.ComponentsHelper.__walkThroughComponent(ComponentsHelper.java:279)
	at io.jmix.ui.component.ComponentsHelper.__walkComponents(ComponentsHelper.java:252)
	at io.jmix.ui.component.ComponentsHelper.__walkThroughComponent(ComponentsHelper.java:279)
	at io.jmix.ui.component.ComponentsHelper.__walkComponents(ComponentsHelper.java:252)
	at io.jmix.ui.component.ComponentsHelper.__walkThroughComponent(ComponentsHelper.java:279)
	at io.jmix.ui.component.ComponentsHelper.__walkComponents(ComponentsHelper.java:252)
	at io.jmix.ui.component.ComponentsHelper.walkComponents(ComponentsHelper.java:247)
	at io.jmix.dynattrui.facet.DynAttrFacetProvider.lambda$loadFromXml$1(DynAttrFacetProvider.java:58)
	at io.jmix.ui.xml.layout.loader.ComponentLoaderContext.executeInitTasks(ComponentLoaderContext.java:167)
	at io.jmix.ui.sys.ScreensImpl.createScreen(ScreensImpl.java:227)
	at io.jmix.ui.sys.ScreensImpl.create(ScreensImpl.java:145)
	at io.jmix.ui.builder.EditorBuilderProcessor.createScreen(EditorBuilderProcessor.java:314)
	at io.jmix.ui.builder.EditorBuilderProcessor.buildEditor(EditorBuilderProcessor.java:88)
	at io.jmix.ui.builder.EditorBuilder.build(EditorBuilder.java:355)
	at io.jmix.ui.action.list.EditAction.execute(EditAction.java:363)
	at io.jmix.ui.action.list.EditAction.actionPerform(EditAction.java:324)
	at io.jmix.ui.component.impl.AbstractTable.handleClickAction(AbstractTable.java:1393)
	at io.jmix.ui.component.impl.AbstractTable.lambda$initComponent$db766529$1(AbstractTable.java:1110)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:709)
	at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:399)
	at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:363)
	at com.vaadin.server.AbstractClientConnector.fireEvent(AbstractClientConnector.java:1216)
	at com.vaadin.v7.ui.Table.handleClickEvent(Table.java:3198)
	at com.vaadin.v7.ui.Table.changeVariables(Table.java:2988)
	at io.jmix.ui.widget.JmixTable.changeVariables(JmixTable.java:357)
	at io.jmix.ui.widget.JmixGroupTable.changeVariables(JmixGroupTable.java:312)
	at com.vaadin.server.communication.ServerRpcHandler.changeVariables(ServerRpcHandler.java:616)
	at com.vaadin.server.communication.ServerRpcHandler.handleInvocation(ServerRpcHandler.java:468)
	at com.vaadin.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:411)
	at com.vaadin.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:275)
	at com.vaadin.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:83)
	at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:40)
	at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1636)
	at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:465)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:750)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:199)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
	at io.jmix.core.impl.logging.LogMdcFilter.doFilterInternal(LogMdcFilter.java:28)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:337)
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
	at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:122)
	at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:116)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
	at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)
	at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
	at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:109)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
	at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:106)
	at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:97)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
	at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
	at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
	at org.springframework.security.web.session.ConcurrentSessionFilter.doFilter(ConcurrentSessionFilter.java:147)
	at org.springframework.security.web.session.ConcurrentSessionFilter.doFilter(ConcurrentSessionFilter.java:125)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
	at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)
	at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
	at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)
	at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
	at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:112)
	at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:82)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
	at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
	at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
	at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:221)
	at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:186)
	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354)
	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
	at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:168)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:346)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:396)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:937)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1793)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
	at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)
	at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)
	at java.base/java.lang.Thread.run(Thread.java:829)

Фрагменты дескриптора экрана деталей
<window xmlns="http://jmix.io/schema/ui/window" xmlns:dynattr="http://jmix.io/schema/dynattr/ui"
        xmlns:c="http://jmix.io/schema/ui/jpql-condition"
        xmlns:app="http://schemas.<secret> /0.1/ui-component.xsd"
...
<facets>
    <dynattr:dynamicAttributes/>
</facets>
...
Обстановка

Jmix version: 1.7.0-RC1
Jmix Studio Plugin Version: 2.5.1-243
IntelliJ version: IntelliJ IDEA 2024.3.2 (Community Edition)
implementation “io.jmix.cuba:jmix-cuba-starter”

Сергей, добрый день!

Спасибо за подробное описание проблемы.
Заведите пожалуйста тикет на https://github.com/jmix-framework/jmix/issues с этим описанием, автоперевода на англ. будет достаточно.

Постараемся исправить в финальном релизе.

Спасибо за оперативный ответ!

Создан тикет Error opening entity detail screen with dynamic attribute more than one row high · Issue #4427 · jmix-framework/jmix

1 симпатия