我'm trying to put together a simple application using Vaadin + Spring Boot with just two views: login and dashboard. I'使用了Vaadin Dashboard demo中的代码片段 . DashboardUI
类中有此方法:
private void updateContent() {
User user = (User) VaadinSession.getCurrent().getAttribute(
User.class.getName());
if (user != null && "admin".equals(user.getRole())) {
// Authenticated user
setContent(new MainView());
removeStyleName("loginview");
getNavigator().navigateTo(getNavigator().getState());
} else {
setContent(new LoginView());
addStyleName("loginview");
}
}
如您所见,视图通过 new
关键字进行实例化 . 因为我正在使用Spring,所以我希望容器能够解决这个问题 . But I cannot figure out how to have the views injected by Spring.
3 回答
使用
@VaadinUIScope
和@VaadinComponent
注释您的视图 . 然后你可以使用@Autowired
来注入你的视图 .您应该设置两个UI类,即LoginUI.class和MainUI.class . 将Spring Security重定向到 /login 并授权给 /
LoginUI.class
MainAppUI.class
然后根据Morfic的建议,在您的应用程序的模块视图上使用@SpringView(name =“moduleOne”,ui = MainAppUI.class),只有在用户登录后才能注册主导航器和模块视图以节省资源 .
注意:看一下这个例子,他们似乎有点伪造它们 . 如果您想继续使用相同的路径,您只需在UI中自动装配虚假视图,而不是使用下面的导航器 .
Vaadin-spring boot wiki通过使用以下内容对此进行了介绍:
1)
@SpringUI
with autowiredSpringViewProvider
2)
@SpringView
对于是否应该将用户重定向到登录视图或其他用户的决定,我通常使用
ViewChangeListener
,类似于: