SpringViewProvider for Spring user interface in Vaadin

I am trying to implement spring views in my vaadin application, but I get NPE on my SpringViewProvider ("Unable to add null view provider"). This is my code:

@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);

I also tried using ViewDisplay instead of a container with one component (root), but with the same result. I also performed a test view to go to:

@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));
 }
}

I get this NPE when I write this url "localhost: 8080 / permalink / test. What am I missing? Should I authorize SpringViewProvider?

Regards, Johan

+4
source share
4 answers

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);
    }
}
+2

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 - https://github.com/peholmst/vaadin4spring

+1

Autowiring , Vaadin - Spring.

. WebServlet SpringVaadinServlet:

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

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

https://vaadin.com/wiki/-/wiki/Main/Vaadin+Spring

0

What Spring version of Vaadin are you using? I can tell you just just skip the navigator and add viewProvider:

@Autowired
SpringViewProvider viewProvider;

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

This works well in both versions 1.0.0 and 1.1.1, however this trick does not work with SpringNavigator (1.1.1)

0
source

Source: https://habr.com/ru/post/1624162/


All Articles