[英]Spring boot, Vaadin - cant autowire Service in a View
我有带有 vaadin 和 vaadin4spring 插件的 Spring Boot 应用程序。 在我的视图中,我想显示数据库中的数据。 我要显示的数据由服务类中的方法返回。
@Service
public class UserService {
public List<Users> getUsers() ....
}
看法:
@SpringView(name = Views.USERLIST) //static constant containing string "users"
public class UserlistView extends HorizontalLayout implements View {
@Autowired
private UserService userService;
@PostConstruct
public void construct() {
displaytable(userService.getUsers());
}
@Override
public void enter(ViewChangeListener.ViewChangeEvent viewChangeEvent) {}
}
UI class:
@SpringUI
@Theme("valo")
public class TUI extends UI {
@Autowired
private SpringViewProvider springViewProvider;
protected void init(VaadinRequest request) {
..
Navigator navigator = new Navigator(this, content);
navigator.addView(Views.USERLIST, UserlistView.class);
navigator.addProvider(springViewProvider);
}
}
在服务器启动期间 vaadin 识别 springview - “cvspring.navigator.SpringViewProvider : 1 SpringView found”,没有显示任何异常或警告。
每次我使用 navigator 显示视图( navigator.navigateTo("users")
)时,视图中的自动装配字段都没有注入,也没有调用 postprocess 方法。 如果我不将视图添加到导航器对象中并使用 url 直接访问视图,那么更奇怪的是 - localhost:8080/#!users 字段将被正确注入并调用方法构造()。
如果有帮助,那就是我的配置类
@Configuration
@ComponentScan(basePackages = { "me.project" })
@EnableAutoConfiguration
@EnableVaadinEventBus
public class TheConfig {
// contains only one bean definition - sessionfactory
}
有没有人遇到过类似的问题? 我无法在任何地方找到帮助,任何人都可以告诉我我做错了什么。 谢谢
当你做
navigator.addView(Views.USERLIST, UserlistView.class);
它创建一个StaticViewProvider
Spring 处理的StaticViewProvider
并使用“new”创建一个视图。 因此,'addView' 不会发生 spring 自动装配如果您使用 springViewProvider 自动装配由 Spring 处理。
所以不要做navigator.addView()
,而是在使用 Spring+Vaadin 时依赖springViewProvider
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.