我试图在我的vaadin应用程序中实现spring视图,但是我在SpringViewProvider上获得了一个NPE(“无法添加空视图提供程序”).这是我的代码:
@SpringUI(path = "permalink")
@Theme("myTheme")
public class PermalinkUI extends UI {
@Autowired
private SpringViewProvider springViewProvider;
private Navigator navigator;
@Override
protected void init(VaadinRequest request) {
final VerticalLayout root = new VerticalLayout();
root.setSizeFull();
root.setMargin(true);
root.setSpacing(true);
setContent(root);
final Panel viewContainer = new Panel();
viewContainer.setSizeFull();
root.addComponent(viewContainer);
root.setExpandRatio(viewContainer, 1.0f);
navigator = new Navigator(this, viewContainer);
navigator.addProvider(springViewProvider);
setNavigator(navigator);
setContent(root);
我还尝试使用ViewDisplay而不是单个组件容器(root),但结果相同.我还实现了一个测试视图来导航到:
@SpringView(name = "test")
public class PermalinkTest extends VerticalLayout implements View {
@Override
public void enter(ViewChangeListener.ViewChangeEvent event) {
removeAllComponents();
String params = event.getParameters();
addComponent(new Label(params));
}
}
我在写这个URL“localhost:8080 / permalink / test时得到这个NPE.
我错过了什么? SpringViewProvider不应该自动装配吗?
关心约翰
解决方法:
使用vaadin-spring-2.0.0时,SpringNavigator是一个托管的@UIScope-ed bean,因此可以直接注入. (如果你不需要,你根本不需要注入SpringViewProvider.)
此外,您必须手动初始化SpringNavigator实例以防止NullPointerException:
@SpringUI
public class SampleUi extends UI {
@Inject
private SpringNavigator navigator;
@Override
protected void init(VaadinRequest request) {
navigator.init(this, this); // Explicit init() call
navigator.navigateTo(StartView.NAME);
}
}
标签:java,spring,vaadin
来源: https://codeday.me/bug/20190609/1201759.html