Jmix version: 1.4.1
Jmix Studio plugin version: 2.0.4-231
Здравствуйте.
У меня есть главный экран с контроллером и xml и есть много фрагментов экрана. В выпадающего меню на главном экране в зависимости от выбора создается определенный фрагмент экрана. В этом фрагменте есть компоненты Collection. У меня также есть service, которому нужны эти компоненты для работы с ними, но я не могу создать фрагмент в сервисе, так как контроллер не является бином и соответственно программа выдает ошибку:
“Caused by: org.springframework.beans.factory.support.ScopeNotActiveException: Error creating bean with name ‘ui_Screens’: Scope ‘vaadin-ui’ is not active for the current thread; consider defining a scoped proxy for this bean if you intend to refer to it from a singleton; nested exception is java.lang.IllegalStateException: No VaadinSession bound to current thread”.
Как мне создавать экран в сервисах, чтобы получать доступ к компонентам.
Вот пример кода, который не работает.
@Service
public class DocumentAdditionalDataHelperService{
@Autowired
private Screens screens;
public Collection<Component> createComponentsFromFragment(Document document) {
DocumentCreating documentCreating = screens.create(DocumentCreating.class);
return documentCreating.createComponentsFromFragment(document);
}
}
где DocumentCreating.class это контроллер главного экрана
это метод в DocumentCreating.class:
public Collection<Component> createComponentsFromFragment(Document document) {
Class documentFragmentName;
documentFragmentName = Class.forName(NAMEFRAGMENT.concat(document.getFormCode().getCode()));
screenFragment = fragments.create(this, documentFragmentName);
return screenFragment.getFragment().getComponents();
}
Class.forName(NAMEFRAGMENT.concat(document.getFormCode().getCode())) - это фрагмента экрана