Using Vaadin with Spring MVC

In this section we cover how to use Vaadin with Spring MVC. Spring MVC is the original Spring web framework built on the Servlet API.

Note
See Using Vaadin with Spring Boot to use Vaadin with Spring Boot.

Registering the Vaadin Servlet

To use Vaadin in your Spring web application you need to register the Vaadin SpringServlet as a dispatcher servlet.

Example: Registering the SpringServlet as a dispatcher servlet.

public abstract class ExampleWebAppInitializer
        implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext servletContext)
            throws ServletException {
        AnnotationConfigWebApplicationContext context =
            new AnnotationConfigWebApplicationContext();
        registerConfiguration(context);
        servletContext.addListener(
                new ContextLoaderListener(context));

        ServletRegistration.Dynamic registration =
            servletContext.addServlet("dispatcher",
                new SpringServlet(context, true));
        registration.setLoadOnStartup(1);
        registration.addMapping("/*");
    }

    private void registerConfiguration(
        AnnotationConfigWebApplicationContext context) {
        // register your configuration classes here
    }
}

Registering Vaadin Scopes

To use Vaadin Spring scopes you need to register the VaadinScopesConfig configuration class. As an alternative, you can add the @EnableVaadin annotation to your configuration class to import VaadinScopesConfig.

The Vaadin Spring add-on provides the VaadinMVCWebAppInitializer class that is an abstract subclass of the WebApplicationInitializer class. You can extend this class and provide your configuration classes by implementing the getConfigurationClasses() method.

Example: Extending VaadinMVCWebAppInitializer and implementing the getConfigurationClasses() method.

public class SampleWebAppInitializer
        extends VaadinMVCWebAppInitializer {

    @Override
    protected Collection<Class<?>>
            getConfigurationClasses() {
        return Collections.singletonList(
                SampleConfiguration.class);
    }
}
@Configuration
@ComponentScan
public class SampleConfiguration {
}
  • This registers VaadinScopesConfig and VaadinServletConfiguration automatically.

Handling URLs

To handle URLs, you need at least one Vaadin component, annotated with @Route. See Add Vaadin view to Spring Boot application for an @Route annotation example.

Declaring Dependencies

To use your Spring web application, you need to declare dependencies in your pom.xml file to vaadin-bom and spring-web as follows:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.vaadin</groupId>
            <artifactId>vaadin-bom</artifactId>
            <version>${vaadin.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>com.vaadin</groupId>
        <artifactId>vaadin-spring</artifactId>
    </dependency>

    <!-- Spring -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>5.0.2.RELEASE</version>
    </dependency>