Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Vaadin中SpringUI的SpringViewProvider_Java_Spring_Vaadin - Fatal编程技术网

Java Vaadin中SpringUI的SpringViewProvider

Java Vaadin中SpringUI的SpringViewProvider,java,spring,vaadin,Java,Spring,Vaadin,我试图在我的vaadin应用程序中实现spring视图,但我在SpringViewProvider上获得了一个NPE(“无法添加空视图提供程序”)。这是我的代码: @SpringUI(path = "permalink") @Theme("myTheme") public class PermalinkUI extends UI { @Autowired private SpringViewProvider springViewProvider; private Navigator navi

我试图在我的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代替单个组件容器(根),但结果相同。我还实现了一个可导航到的测试视图:

@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不应该自动连线吗


关于Johan

只要正确设置Vaadin-Spring集成,自动布线就应该能够工作

例如,WebServlet必须扩展SpringVadInServlet:

@WebServlet(value = "/*", asyncSupported = true)
public static class PermalinkUIServlet extends SpringVaadinServlet{

        @Override
        protected void servletInitialized() throws ServletException {
            super.servletInitialized();
            ...
        }
    }

另外,请看一看您使用的是哪个Spring Vaadin版本?我建议您只需选择简单导航器并添加viewProvider:

@Autowired
SpringViewProvider viewProvider;

Navigator navi = new Navigator(this,this);
navi.addViewProvider(viewProvider);
navi.setErrorView(ErrorView.class); 

这在1.0.0和1.1.1两个版本中都能很好地工作,但是这个技巧不适用于SpringNavigator(1.1.1)

当使用
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);
    }
}

如果需要手动使用SpringViewProvider,则需要通过构造函数发送,如下所示:

@SpringUI
@Theme(ValoTheme.THEME_NAME)
public class NavigationUI extends UI {

    private final SpringViewProvider viewProvider;

    @Autowired
    public NavigationUI(SpringViewProvider viewProvider) {
        this.viewProvider = viewProvider;
    }

    @Override
    protected void init(VaadinRequest request) {
        final VerticalLayout root = new VerticalLayout();
        root.setSizeFull();
        root.setMargin(true);
        root.setSpacing(true);
        setContent(root);
...

这个例子取自官方的Spring4Vaadin项目-

Hi。很抱歉没有说得更具体,我有两个ui被一个UIProvider(在我的SpringVaadin servlet上注释)“分隔”,自动连接在另一个ui上工作得很好(自动连接其他bean,因为该ui没有SpringViewProvider)视图是使用
#!
前缀访问的,因此,请尝试使用
localhost:8080/permalink/#!test
,看看它是否有效。如果没有前缀,您尝试访问的是路径映射为
/permalink/test
的UI,而不是视图。