Browse Source

Update Vaadin Spring documentation for 1.1.0

Change-Id: I8dcf5b7576a64b26419136ca6b8927f4c2731d60
tags/8.0.0.alpha9
Henri Sara 7 years ago
parent
commit
5ad67a15e8
1 changed files with 49 additions and 55 deletions
  1. 49
    55
      documentation/advanced/advanced-spring.asciidoc

+ 49
- 55
documentation/advanced/advanced-spring.asciidoc View File

@@ -25,7 +25,7 @@ API documentation for add-ons is available at:
* Vaadin Spring Boot API at link:https://vaadin.com/api/vaadin-spring-boot[vaadin.com/api/vaadin-spring-boot]

To learn more about Vaadin Spring, the
link:https://vaadin.com/wiki/-/wiki/Main/Vaadin+Spring[Vaadin Spring Tutorial]
link:https://vaadin.github.io/spring-tutorial/[Vaadin Spring Tutorial]
gives a hands-on introduction. The source code of the Spring Tutorial demo is
available for browsing or cloning at
link:https://github.com/Vaadin/spring-tutorial[github.com/Vaadin/spring-tutorial].
@@ -58,7 +58,7 @@ Framework Reference Documentation].

* link:http://projects.spring.io/spring-framework/[Spring Project]

* link:https://vaadin.com/wiki/-/wiki/Main/Vaadin+Spring[Vaadin Spring Tutorial]
* link:https://vaadin.github.io/spring-tutorial/[Vaadin Spring Tutorial]

endif::web[]

@@ -177,13 +177,12 @@ enables general Spring functionalities in a web application.

You can use the Spring Initializr at
link:https://start.spring.io/[start.spring.io] website to generate a project,
which you can then download as a package and import in your IDE. The generated
project is a Spring application stub; you need to add at least Vaadin
dependencies ( [literal]#++vaadin-spring-boot++#, [literal]#++vaadin-themes++#,
and [literal]#++vaadin-client-compiled++#) and a UI class to the generated
project, as well as a theme, and so forth.
which you can then download as a package and import in your IDE. Pick Vaadin as
a dependency on the site to include all the required Vaadin Spring dependencies
and auto-configuration.The generated project is a Spring application stub; you
need to add at least a UI class to the generated project.

See the link:https://vaadin.com/wiki/-/wiki/Main/Vaadin+Spring[Vaadin Spring
See the link:https://vaadin.github.io/spring-tutorial/[Vaadin Spring
Tutorial] for detailed instructions for using Spring Boot.


@@ -198,9 +197,9 @@ up the Development Environment">>.

To install the Vaadin Spring and/or Vaadin Spring Boot add-ons, either define
them as an Ivy or Maven dependency or download from the Vaadin Directory add-on
page at <<,vaadin.com/directory#addon/vaadin-spring>> or
<<,vaadin.com/directory#addon/vaadin-spring-boot>>. See
<<dummy/../../../framework/addons/addons-overview.asciidoc#addons.overview,"Using
page at link:https://vaadin.com/directory#addon/vaadin-spring[vaadin.com/directory#addon/vaadin-spring]
or link:https://vaadin.com/directory#addon/vaadin-spring-boot[vaadin.com/directory#addon/vaadin-spring-boot].
See <<dummy/../../../framework/addons/addons-overview.asciidoc#addons.overview,"Using
Vaadin Add-ons">> for general instructions for installing and using Vaadin
add-ons.

@@ -222,11 +221,17 @@ The Maven dependency is as follows:
&lt;/dependency&gt;
----

For Vaadin Spring Boot, depending on [literal]#++vaadin-spring-boot-starter++# will
include all the required Vaadin dependencies.


[[advanced.spring.preparing]]
== Preparing Application for Spring

A Vaadin application that uses Spring must have a file named
[filename]#applicationContext.xml# in the [filename]#WEB-INF# directory.
Using Spring Initializr automatically generates a suitable file, but if
you configure Vaadin Spring manually, you can follow the model below.

[subs="verbatim,replacements,quotes"]
----
@@ -249,7 +254,7 @@ A Vaadin application that uses Spring must have a file named
&lt;/beans&gt;
----
The application should not have a servlet extending [classname]#VaadinServlet#,
as Vaadin servlet has its own [classname]#VaadinSpringServlet# that is deployed
as Vaadin servlet has its own [classname]#SpringVaadinServlet# that is deployed
automatically. If you need multiple servlets or need to customize the Vaadin
Spring servlet, see <<advanced.spring.deployment>>.

@@ -345,7 +350,7 @@ that scope.
=== [classname]#@UIScope#

UI-scoped beans are uniquely identified within a UI instance, that is, a browser
window or tab. The lifecycle of UI-scoped beans is bound between to the
window or tab. The lifecycle of UI-scoped beans is bound between the
initialization and closing of a UI. Whenever you inject a bean, as long as you
are within the same UI, you will get the same instance.

@@ -374,37 +379,37 @@ ifdef::web[]
Vaadin Spring extends the navigation framework in Vaadin, described in
<<dummy/../../../framework/advanced/advanced-navigator#advanced.navigator,"Navigating
in an Application">>. It manages Spring views with a special view provider and
enables view scoping.
enables view scoping. Furthermore, Vaadin Spring provides a customized navigator class
[classname]#SpringNavigator# that supports the scope functionality.


[[advanced.spring.navigation.ui]]
=== Preparing the UI

You can define navigation for any single-component container, as described in
You can define navigation for any single-component container, component container or bean
implementing [classname]#ViewDisplay#, as described in
<<dummy/../../../framework/advanced/advanced-navigator#advanced.navigator.navigating,"Setting
Up for Navigation">>, but typically you set up navigation for the entire UI
content. To use Vaadin Spring views, you need to inject a
[classname]#SpringViewProvider# in the UI and add it as a provider for the
navigator.
content. The easiest way to set up navigation is to use the annotation
[classname]#@SpringViewDisplay# on the UI (in which case the whole contents of the UI are
replaced on navigation) or on any UI scoped bean implementing one of the above mentioned
interfaces.


[source, java]
----
@SpringUI(path="/myspringui")
@SpringViewDisplay
public class MySpringUI extends UI {
@Autowired
SpringViewProvider viewProvider;

@Override
protected void init(VaadinRequest request) {
Navigator navigator = new Navigator(this, this);
navigator.addProvider(viewProvider);

// Navigate to start view
navigator.navigateTo("");
}
}
----

If not using Spring Boot, auto-configuration of navigation can be enabled with the annotation
@EnableVaadinNavigation on a configuration class.


[[advanced.spring.navigation.view]]
=== The View
@@ -445,20 +450,8 @@ It is a recommended pattern to have the view name in a static member constant in
the view class, as was done in the example previously, so that the name can be
referred to safely.

supportsParameters:: Specifies whether view parameters can be passed to the view as a suffix to the
name in the navigation state, that is, in the form of
[literal]#++viewname+viewparameters++#. The view name is merely a prefix and
there is no separator nor format for the parameters, but those are left for the
view to handle. The parameter support mode is disabled by default.


+
[source, java]
----
@SpringView(name="myview", supportsParameters=true)
----
+
You could then navigate to the state with a URI fragment such as
You can also navigate to a view with a URI fragment such as
[literal]#++#!myview/someparameter++# or programmatically with:


@@ -471,12 +464,6 @@ getUI().getNavigator().navigateTo("myview/someparameter");
The [methodname]#enter()# method of the view gets the URI fragment as parameter
as is and can interpret it in any application-defined way.

+
Note that in this mode, matching a navigation state to a view is done by the
prefix of the fragment! Thereby, no other views may start with the name of the
view as prefix. For example, if the view name is " [literal]#++main++#", you
must not have a view named " [literal]#++maintenance++#".

uis:: If the application has multiple UIs that use [classname]#SpringViewProvider#,
you can use this parameter to specify which UIs can show the view.

@@ -556,33 +543,40 @@ by additional unofficial add-ons on top of Vaadin Spring.
[[advanced.spring.accesscontrol.accessdenied]]
=== Access Denied View

By default, the view provider acts as if a denied view didn't exist. You can set
If access to a view is denied by an access control bean, the access denied view
is shown for it. For non-existing views, the error view is shown. You can set
up an "Access Denied" view that is shown if the access is denied with
[methodname]#setAccessDeniedView()# in [classname]#SpringViewProvider#.
[methodname]#setAccessDeniedViewClass()# in [classname]#SpringViewProvider#,
and an error view with [methodname]#setErrorView()# in [classname]#SpringNavigator#.
The same view can also be used both as an access denied view and as an error
view to hide the existence of views the user is not allowed to access.


[source, java]
----
@Autowired
SpringViewProvider viewProvider;
@Autowired
SpringNavigator navigator;

@Override
protected void init(VaadinRequest request) {
Navigator navigator = new Navigator(this, this);
navigator.addProvider(viewProvider);

// Set up access denied view
viewProvider.setAccessDeniedViewClass(
MyAccessDeniedView.class);
// Set up error view
navigator.setErrorView(MyErrorView.class);
----

Note that the error view can also be a class with which an error view bean is
found. In this case, the error view must be UI scoped.


[[advanced.spring.deployment]]
== Deploying Spring UIs and Servlets

Vaadin Spring hooks into Vaadin framework by using a special
[classname]#VaadinSpringServlet#. As described earlier, you do not need to map
[classname]#SpringVaadinServlet#. As described earlier, you do not need to map
an URL path to a UI, as it is handled by Vaadin Spring. However, in the
following, we go through some cases where you need to customize the servlet or
use Spring with non-Spring servlets and UIs in a web application.
@@ -593,7 +587,7 @@ use Spring with non-Spring servlets and UIs in a web application.
When customizing the Vaadin servlet, as outlined in
<<dummy/../../../framework/application/application-lifecycle#application.lifecycle.servlet-service,"Vaadin
Servlet, Portlet, and Service">>, you simply need to extend
[classname]#com.vaadin.spring.internal.VaadinSpringServlet# instead of
[classname]#com.vaadin.spring.server.SpringVaadinServlet# instead of
[classname]#com.vaadin.servlet.VaadinServlet#.

[subs="normal"]
@@ -611,7 +605,7 @@ an Application">>.
[[advanced.spring.deployment.urlmapping]]
=== Defining Servlet Root

Spring UIs are managed by a Spring servlet ( [classname]#VaadinSpringServlet#),
Spring UIs are managed by a Spring servlet ( [classname]#SpringVaadinServlet#),
which is by default mapped to the root of the application context. For example,
if the name of a Spring UI is " [literal]#++my-spring-ui++#" and application
context is [literal]#++/myproject++#, the UI would by default have URL "
@@ -648,7 +642,7 @@ You can also map the Spring servlet to another URL in servlet definition in
[[advanced.spring.servlets.mixing]]
=== Mixing With Other Servlets

The [classname]#VaadinSpringServlet# is normally used as the default servlet,
The [classname]#SpringVaadinServlet# is normally used as the default servlet,
but if you have other servlets in the application, such as for non-Spring UIs,
you need to define the Spring servlet explicitly in the [filename]#web.xml#. You
can map the servlet to any URL path, but perhaps typically, you define it as the
@@ -661,7 +655,7 @@ default servlet as follows, and map the other servlets to other URL paths:
&lt;servlet&gt;
&lt;servlet-name&gt;Default&lt;/servlet-name&gt;
&lt;servlet-class&gt;
com.vaadin.spring.internal.VaadinSpringServlet
com.vaadin.spring.server.SpringVaadinServlet
&lt;/servlet-class&gt;
&lt;/servlet&gt;


Loading…
Cancel
Save