Щупаю Vaadin 10. Если я правильно понял из туториала, при пользовании Spring-бинами нам нужно определить их область применения в Vaadin — VaadinSessionScope (и тогда мы дёргаем один и тот же бин в рамках рантайма программы) и UIScope (что означает, что для каждой сессии создаётся свой экземпляр бина).
Окей.
Создал View:
@Component
@Route(value = "admin")
@Theme(value = Lumo.class)
public class NewsStreamView extends VerticalLayout {
private final UserService userService;
private Grid<UserDto> grid = new Grid<>(UserDto.class);
@Autowired
public NewsStreamView(UserService userService) {
add(grid);
this.userService = userService;
}
@PostConstruct
private void init() {
List<UserDto> users = userService.getAll();
grid.setItems(users);
}
}
Пометил сервис нужным скоупом:
@Service
@UIScope
public class UserService extends AbstractService<User, UserDto, QUser,
EntityDtoMapper<User, UserDto>, UserRepository> {
public UserService(UserRepository repository, EntityDtoMapper<User, UserDto> mapper) {
super(repository, mapper);
}
}
По идее, всё должно заработать, но нет:
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userService': 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
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:362) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:251) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1135) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1062) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:818) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:724) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]
... 19 common frames omitted
Caused by: java.lang.IllegalStateException: No VaadinSession bound to current thread
at com.vaadin.flow.spring.scopes.AbstractScope.getVaadinSession(AbstractScope.java:75) ~[vaadin-spring-10.0.3.jar:na]
at com.vaadin.flow.spring.scopes.VaadinUIScope.getBeanStore(VaadinUIScope.java:121) ~[vaadin-spring-10.0.3.jar:na]
at com.vaadin.flow.spring.scopes.AbstractScope.get(AbstractScope.java:44) ~[vaadin-spring-10.0.3.jar:na]
at com.vaadin.flow.spring.scopes.VaadinUIScope.get(VaadinUIScope.java:42) ~[vaadin-spring-10.0.3.jar:na]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:350) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]
... 25 common frames omitted
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости