12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- ---
- title: Creating An Application With Different Features For Different Clients
- order: 7
- layout: page
- ---
-
- [[creating-an-application-with-different-features-for-different-clients]]
- = Creating an application with different features for different clients
-
- Providing different features for different clients can be done by
- creating a specialized UIProvider for the application.
-
- We start by creating the specialized UI's
-
- [source,java]
- ....
- public class DefaultUI extends UI {
- @Override
- protected void init(VaadinRequest request) {
- setContent(
- new Label("This browser does not support touch events"));
- }
- }
- ....
-
- [source,java]
- ....
- public class TouchUI extends UI {
- @Override
- protected void init(VaadinRequest request) {
- WebBrowser webBrowser = getPage().getWebBrowser();
- String screenSize = "" + webBrowser.getScreenWidth() + "x"
- + webBrowser.getScreenHeight();
- setContent(new Label("Using a touch enabled device with screen size"
- + screenSize));
- }
- }
- ....
-
- We then define an UIProvider which knows what UI the application should
- return.
-
- [source,java]
- ....
- public class DifferentFeaturesForDifferentClients extends UIProvider {
-
- @Override
- public Class<? extends UI> getUIClass(UIClassSelectionEvent event) {
- // could also use browser version etc.
- if (event.getRequest().getHeader("user-agent").contains("mobile")) {
- return TouchUI.class;
- } else {
- return DefaultUI.class;
- }
- }
- }
- ....
-
- Now that we have an `UIProvider` we need to tell Vaadin to use it. This is
- most easily done by defining the `UIProvider` class in web.xml instead of
- defining a UI class.
-
- [source,xml]
- ....
- <servlet>
- <servlet-name>My Vaadin App</servlet-name>
- <servlet-class>com.vaadin.server.VaadinServlet</servlet-class>
- <init-param>
- <description>Vaadin UI</description>
- <param-name>UIProvider</param-name>
- <param-value>com.example.myexampleproject.DifferentFeaturesForDifferentClients</param-value>
- </init-param>
- </servlet>
- ....
-
- Each UI can have its own feature set, layout and theme.
|