SlideShare una empresa de Scribd logo
1 de 35
Descargar para leer sin conexión
Java-Webanwendungen mit Vaadin 8
Expertenkreis Java, 14.09.2017, GEDOPLAN
Hendrik Jungnitsch, GEDOPLAN GmbH
Vorteile Webanwendung ggü. Desktop-Anwendungen
Desktop-Anwendungen/Clients werden zunehmend von Web-GUIs
abgelöst
Logik und Daten zentral auf Server
Keine Installation von zusätzlicher Client-Software erforderlich
Bei Updates, kein Aktualisieren auf Clientseite notwendig
2
Problemstellung Webanwendung für Java-Entwickler
Zugrundeliegendes Konzept unterscheidet sich deutlich von
Desktop-Entwicklung
Zustandslosigkeit des HTTP-Protokolls
Nicht komponentenorientiert
Nicht eventgetrieben
Erfordert Kenntnisse nicht nur in Java, sondern auch
Webtechnologien
HTML, CSS, JavaScript, Ajax
3
Vaadin
Webframework für Java
Für JavaScript/Ajax-gestützte Webanwendungen
Entwickelt von Vaadin Ltd.
Opensource (Apache-Lizenz 2.0)
Aktuelle Version 8.x.x
4
(https://vaadin.com/)
Was bietet Vaadin ?
Framework für Web-Anwendungen
An Desktop-Entwicklung (z. B. Swing) angelehntes Programmiermodell
Abstraktion von Webtechnologien
Umfangreiches Widgetset an Komponenten
Eingabekomponenten, Tabellen, Trees, Menüs, usw.
Server- und clientseitige Entwicklung möglich
5
Grundlegende Funktionsweise
Besteht aus
Clientseitiger Engine mit Widgetset (JavaScript)
Serverseitiger Engine UI-Komponenten (Java)
UIs werden auf Serverseite mit Java-Objekten aufgebaut
Bei Aufruf einer Seite wird zuerst die JavaScript-Engine in den
Browser geladen
Synchronisation von Komponenten in Client und Server per Ajax
Transparent für den Entwickler
6
Vaadin Architektur - Übersicht
7
Client
(Webbrowser)
Java Server
JavaScript-
Engine
(Google-Web-
Toolkit)
Widgets
Servlet
Vaadin
Komponenten
GUI
Anwendung
Business-Logik
Vaadin Dependencies
8
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-server</artifactId>
<version>8.0.5</version>
</dependency>
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-themes</artifactId>
<version>8.0.5</version>
</dependency>
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-client-compiled</artifactId>
<version>8.0.5</version>
</dependency>
Struktur der Vaadin-Anwendung
Aufbau wie Standard-Webanwendung:
Deployment-Desriptor
WEB-INFweb.xml
9
Uis, Views und sonstige Java-Quellen
Konfigurationsdateien für Java-Quellen
Webapp-Root, JSP, XHTML, etc.
Deployment-Deskriptors
Demo: Eine einfache Vaadin-Anwendung
10
Title("Hello World") // Titel der Seite
@Theme("valo") // Theme
public class HelloWorld extends UI {
@Override
protected void init(VaadinRequest request) {
// Inhaltsbereich definieren
VerticalLayout content = new VerticalLayout();
setContent(content);
// Hinzufügen einer einfachen Textausgabe
content.addComponent(new Label("Hello World!"));
}
}
Konfiguration der Anwendung
11
WebServlet(value = "/*", asyncSupported = true)
@VaadinServletConfiguration(productionMode=false, ui=HelloWorld.class)
public class DemoServlet extends VaadinServlet {
}
<servlet>
<servlet-name>HelloWorld UI</servlet-name>
<servlet-class>com.vaadin.server.VaadinServlet</servlet-class>
<init-param>
<param-name>ui</param-name>
<param-value>de.gedoplan.seminar.vaadin.demo.HelloWorld</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorld UI</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
Seite im Browser
12
Vaadin Komponenten
Label
Link
TextField
TextArea
PasswordField
RichTextArea
13
DateField
Button
CheckBox
Upload
ProgressIndicator
Slider
Formulare mit Binder
Verknüpft Formulare mit (fachlichen) Java-Objekten
Kein HTML-Form
Verknüpfung über Zugriffsmethoden möglich = typsicher
Alternativ Verknüpfung über Beanproperties
binder = new Binder<>(Vortrag.class);
binder.bind(titel, Vortrag::getTitel,Vortrag::setTitel);
binder.bind(titel, "titel");
Formulare mit Binder
Deklaratives Zuordnen über Attribute
Zuordnen zu Bean
Oder separates Schreiben und Lesen
@PropertyId("titel")
private TextField titel
binder.bindInstanceFields(this);
binder.readBean(vortrag);
binder.writeBean(vortrag);
binder.setBean(vortrag);
Konvertierung
Umwandeln von Präsentation <-> Modell über Converter
Zuweisen von Converter über Binder
als Converter oder in Form von 2 Lambdaausdrücken
Builder Pattern
Typsicher im Falle von Zugriffsmethoden
binder.forField(dauer).withConverter(new StringToLongConverter());
Validierung
Validieren über Validators
Zuweisen über den Binder
Kombinierbar mit Convertern -> Aufbau Converter-Validator-
Pipeline
Validator für Beanvalidation vorhanden
BeanValidationBinder fügt diesen automatisch hinzu
binder.forField(dauer).withValidator(...);
binder = new BeanValidationBinder<>(Vortrag.class);
Grid
Komponente für Darstellen tabellarischer Daten
Viele Konfigurationsmöglichkeiten
Direktes Hinzufügen einer Collection möglich
Zuweisen der Columns über Zugriffsmethoden oder Beanproperties
Automatisches Paging beim Scrollen
Grid
Erstellen zu Beantyp (Automatisches Einrichten der Spalten)
Zugriff auf Columns
Hinzufügen einer Collection
Auswahl von Items
Grid<Vortrag> tabelle = new Grid<>(Vortrag.class);
tabelle.getColumn("beschreibung").setHidden(true);
tabelle.setItems(list)
tabelle.setSelectionMode(SelectionMode.SINGLE);
tabelle.addSelectionListener(e -> ...);
DataProvider
Definiert das Laden der Daten
Erlaubt z. B. datenbankseitiges Paging
Implementierung mit Queries für Laden einer Page und
Gesamtanzahl
Einfache Einbindung bestehender Services
tabelle.setDataProvider((f,offset,limit) ->
vortragService.load(offset,limit).stream(),
vortragService::count);
Layouts
Anordnung der Elemente über Layoutmanager
Verwendung erfolgt programmatisch
VerticalLayou
t
HorizontalLayou
t
GridLayout
AbsoluteLayou
t
CssLayout
FormLayout
Themes
Aussehen bestimmt durch Themes
Einfaches Austauschen des Look-and-Feel
Arbeiten mit SCSS
Aussehen von Standard-Theme Valo ist stark konfigurierbar
Eigene Themes einfach als Ableitung eines Standard-Themes
Navigation
Einfaches Konzept für Navigation
Erlaubt bookmarkable URLs
Navigator verwaltet eine Menge von Views für eine UI
View gemappt auf URI-Fragment
Views werden angezeigt in dafür vorgesehenem Bereich
Deklaratives XML
Alternative zum programmatischen Aufbau
Definition in HTML File
Tags für die Komponenten und Container
Beschreibt nur das Layout, keine Funktionalität
Verknüpfung mit Komponenten in Java Klasse möglich
Vaadin Designer
Grafischer Editor für Vaadin Anwendungen
einfaches Zusammenklicken der Oberflächen
Arbeitet mit der deklarativen Definition
Kostenpflichtig
Erweiterbarkeit
Vaadin kann einfach um Komponenten erweitert werden
Serverseitige Erweiterungen können in Java geschrieben werden
Möglichkeiten für Erweiterungen mit clientseitigem Anteil
GWT (Google-Web-Toolkit)
Typsicher
Muss kompiliert werden
JavaScript
Ungetyped
Schnellerer Entwicklungszyklus
Große Auswahl an Widgets
Eigene Vaadin Komponenten
27
Client
Server
Widget
Connector
State
Component
JavaScript Komponenten
Serverseitige Komponente
Verknüpfung über Connector-Methode = Einstiegspunkt
Vollqualifizierter Klassenname
Zustandsobjekt
@JavaScript("JsHtml5TextFieldConnector.js")
public class JsHtml5TextField extends AbstractJavaScriptComponent {
de_gedoplan_demos_vaadin_demo_ui_components_JsHtml5TextField
= function() {
public class JsHtml5TextFieldState extends JavaScriptComponentState {
Extensions
Ähnlich wie eigene Komponente
Kann auf bestehende Komponenten angewandt werden
Fügt Funktionalität hinzu
Ermöglicht es, ohne spezielles Ableiten zu erweitern
So kann auch per JavaScript eine Vaadin Komponente erweitert
werden
TextField textField = new TextField();
JsHtml5TextFieldExtension jsHtml5TextFieldExtension = new
JsHtml5TextFieldExtension();
jsHtml5TextFieldExtension.extend(textField);
Webcomponent Addon
Experimentelles Addon für einfaches Integrieren von
Webcomponents (Vaadin Elements, Polymer, etc.)
Eigenen Javascript-Komponenten
Auch für Manipulieren der Clientseite bestehender Komponenten
Erlaubt einfaches Integrieren von Client- und Serverseite
Vaadin als Frontend für Java EE oder Spring
Integration einfach über offizielle Addons
Vaadin UIs und Views sind dann gemanaged und können injecten
Neue Scopes: UIScoped und ViewScoped
Einfaches Bereitstellen
Keine Servletkonfiguration notwendig
Views werden automatisch angezogen
Vorteile von Vaadin
JavaScript basiert (kein Browser Plug-in)
Webtechnologie für Entwickler transparent
Ermöglicht Konzentration auf das Wesentliche
Cross-Browser optimiert
Serverseitige Steuerung
Sicherheit, Kontrolle
Von Desktopentwicklung bekannte Vorgehensweise
Programmatischer Aufbau der UIs
Standard Java-Webprojekt
Gute Erweiterbarkeit, viele Add-ons verfügbar
32
Nachteile von Vaadin
Webtechnologie für Entwickler transparent
Nachteil für Webseiten-Design
Serverseitige Steuerung
erhöhter Netzwerkverkehr
33
Einsatzbereiche für Vaadin
Gut geeignet für
Desktopähnliche Business-Applikationen im Browser
Programmatisch generierte Web-GUIs
Weniger gut geeignet für
Webseiten
34
Demoanwendung
Sourcecode für die Demoanwendung:
https://github.com/GEDOPLAN/vaadin-demo

Más contenido relacionado

La actualidad más candente

PHP-Module in statischen Seiten - Architektur-Ansätze
PHP-Module in statischen Seiten - Architektur-AnsätzePHP-Module in statischen Seiten - Architektur-Ansätze
PHP-Module in statischen Seiten - Architektur-AnsätzeRalf Lütke
 
Good by Server... Hello Client!
Good by Server... Hello Client!Good by Server... Hello Client!
Good by Server... Hello Client!Sandro Sonntag
 
Vaadin - Yet another Java Web Framework? (Google DevFest Karlsruhe 2012)
Vaadin - Yet another Java Web Framework? (Google DevFest Karlsruhe 2012)Vaadin - Yet another Java Web Framework? (Google DevFest Karlsruhe 2012)
Vaadin - Yet another Java Web Framework? (Google DevFest Karlsruhe 2012)Christian Janz
 
Restful Frontend-Architecture
Restful Frontend-ArchitectureRestful Frontend-Architecture
Restful Frontend-ArchitectureSandro Sonntag
 
Android Entwicklung (App Entwickler Konferenz 2010 der Telekom)
Android Entwicklung (App Entwickler Konferenz 2010 der Telekom)Android Entwicklung (App Entwickler Konferenz 2010 der Telekom)
Android Entwicklung (App Entwickler Konferenz 2010 der Telekom)greenrobot
 
Grails im Überblick und in der Praxis
Grails im Überblick und in der PraxisGrails im Überblick und in der Praxis
Grails im Überblick und in der PraxisTobias Kraft
 
Windows 8 für Entwickler
Windows 8 für EntwicklerWindows 8 für Entwickler
Windows 8 für EntwicklerJan Hentschel
 
B3 Lotus Expeditor Und Composite Applications
B3 Lotus Expeditor Und Composite ApplicationsB3 Lotus Expeditor Und Composite Applications
B3 Lotus Expeditor Und Composite ApplicationsAndreas Schulte
 
Server Revolutions- Der Spring Source DM Server
Server Revolutions- Der Spring Source DM ServerServer Revolutions- Der Spring Source DM Server
Server Revolutions- Der Spring Source DM ServerSandro Sonntag
 
Kann ich mit Grails Enterprise Applikationen umsetzen?
Kann ich mit Grails Enterprise Applikationen umsetzen?Kann ich mit Grails Enterprise Applikationen umsetzen?
Kann ich mit Grails Enterprise Applikationen umsetzen?Tobias Kraft
 
Enterprise 2.0 Portale mit Grails. Geht das?
Enterprise 2.0 Portale mit Grails. Geht das?Enterprise 2.0 Portale mit Grails. Geht das?
Enterprise 2.0 Portale mit Grails. Geht das?Tobias Kraft
 
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDI
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDISchlanke Webarchitekturen nicht nur mit JSF 2 und CDI
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDIadesso AG
 
JSF meets JS (2. ed.) - JSF-Komponenten mit JavaScript
JSF meets JS (2. ed.) - JSF-Komponenten mit JavaScriptJSF meets JS (2. ed.) - JSF-Komponenten mit JavaScript
JSF meets JS (2. ed.) - JSF-Komponenten mit JavaScriptOPEN KNOWLEDGE GmbH
 

La actualidad más candente (20)

PHP-Module in statischen Seiten - Architektur-Ansätze
PHP-Module in statischen Seiten - Architektur-AnsätzePHP-Module in statischen Seiten - Architektur-Ansätze
PHP-Module in statischen Seiten - Architektur-Ansätze
 
Good by Server... Hello Client!
Good by Server... Hello Client!Good by Server... Hello Client!
Good by Server... Hello Client!
 
Vaadin - Yet another Java Web Framework? (Google DevFest Karlsruhe 2012)
Vaadin - Yet another Java Web Framework? (Google DevFest Karlsruhe 2012)Vaadin - Yet another Java Web Framework? (Google DevFest Karlsruhe 2012)
Vaadin - Yet another Java Web Framework? (Google DevFest Karlsruhe 2012)
 
Windows 8.1 UI für Entwickler
Windows 8.1 UI für EntwicklerWindows 8.1 UI für Entwickler
Windows 8.1 UI für Entwickler
 
Restful Frontend-Architecture
Restful Frontend-ArchitectureRestful Frontend-Architecture
Restful Frontend-Architecture
 
Android Entwicklung (App Entwickler Konferenz 2010 der Telekom)
Android Entwicklung (App Entwickler Konferenz 2010 der Telekom)Android Entwicklung (App Entwickler Konferenz 2010 der Telekom)
Android Entwicklung (App Entwickler Konferenz 2010 der Telekom)
 
GWT – Google Web Toolkit in der Praxis
GWT – Google Web Toolkit in der PraxisGWT – Google Web Toolkit in der Praxis
GWT – Google Web Toolkit in der Praxis
 
GWT: Eintauchen in MVP und Internationalisierung
GWT: Eintauchen in MVP und InternationalisierungGWT: Eintauchen in MVP und Internationalisierung
GWT: Eintauchen in MVP und Internationalisierung
 
Elsholz stoll js_03_10
Elsholz stoll js_03_10Elsholz stoll js_03_10
Elsholz stoll js_03_10
 
Grails im Überblick und in der Praxis
Grails im Überblick und in der PraxisGrails im Überblick und in der Praxis
Grails im Überblick und in der Praxis
 
MVP mit dem Google Web Toolkit
MVP mit dem Google Web ToolkitMVP mit dem Google Web Toolkit
MVP mit dem Google Web Toolkit
 
Windows 8 für Entwickler
Windows 8 für EntwicklerWindows 8 für Entwickler
Windows 8 für Entwickler
 
Eintauchen in MVP mit GWT
Eintauchen in MVP mit GWT Eintauchen in MVP mit GWT
Eintauchen in MVP mit GWT
 
B3 Lotus Expeditor Und Composite Applications
B3 Lotus Expeditor Und Composite ApplicationsB3 Lotus Expeditor Und Composite Applications
B3 Lotus Expeditor Und Composite Applications
 
Server Revolutions- Der Spring Source DM Server
Server Revolutions- Der Spring Source DM ServerServer Revolutions- Der Spring Source DM Server
Server Revolutions- Der Spring Source DM Server
 
Kann ich mit Grails Enterprise Applikationen umsetzen?
Kann ich mit Grails Enterprise Applikationen umsetzen?Kann ich mit Grails Enterprise Applikationen umsetzen?
Kann ich mit Grails Enterprise Applikationen umsetzen?
 
Enterprise 2.0 Portale mit Grails. Geht das?
Enterprise 2.0 Portale mit Grails. Geht das?Enterprise 2.0 Portale mit Grails. Geht das?
Enterprise 2.0 Portale mit Grails. Geht das?
 
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDI
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDISchlanke Webarchitekturen nicht nur mit JSF 2 und CDI
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDI
 
AngularJS
AngularJSAngularJS
AngularJS
 
JSF meets JS (2. ed.) - JSF-Komponenten mit JavaScript
JSF meets JS (2. ed.) - JSF-Komponenten mit JavaScriptJSF meets JS (2. ed.) - JSF-Komponenten mit JavaScript
JSF meets JS (2. ed.) - JSF-Komponenten mit JavaScript
 

Similar a Java-Webanwendungen mit Vaadin 8

Google Web Toolkit
Google Web ToolkitGoogle Web Toolkit
Google Web ToolkitTorben Brodt
 
Enterprise UI
Enterprise UIEnterprise UI
Enterprise UIgedoplan
 
Gwt Techtalk Präsentation
Gwt Techtalk PräsentationGwt Techtalk Präsentation
Gwt Techtalk Präsentationmlegenhausen
 
PAVONElive und PAVONE PCS für Java EE
PAVONElive und PAVONE PCS für Java EEPAVONElive und PAVONE PCS für Java EE
PAVONElive und PAVONE PCS für Java EEBjoern Reinhold
 
Metaprogrammierung und Reflection
Metaprogrammierung und ReflectionMetaprogrammierung und Reflection
Metaprogrammierung und ReflectionStefan Marr
 
dotnet Cologne 2013 - Windows Azure Mobile Services
dotnet Cologne 2013 - Windows Azure Mobile Servicesdotnet Cologne 2013 - Windows Azure Mobile Services
dotnet Cologne 2013 - Windows Azure Mobile ServicesSascha Dittmann
 
JAX 2015 - Continuous Integration mit Java & Javascript
JAX 2015 - Continuous Integration mit Java & JavascriptJAX 2015 - Continuous Integration mit Java & Javascript
JAX 2015 - Continuous Integration mit Java & Javascriptdzuvic
 
Einführung in ASP.NET Core Middlewares
Einführung in ASP.NET Core MiddlewaresEinführung in ASP.NET Core Middlewares
Einführung in ASP.NET Core MiddlewaresMatthias Jauernig
 
Web460 ppt-de-jul-wi-web-all-2020
Web460 ppt-de-jul-wi-web-all-2020Web460 ppt-de-jul-wi-web-all-2020
Web460 ppt-de-jul-wi-web-all-2020HansruediDbeli1
 
Einführung in die Java-Webentwicklung - Part II - [3 of 3] - Java Server Face...
Einführung in die Java-Webentwicklung - Part II - [3 of 3] - Java Server Face...Einführung in die Java-Webentwicklung - Part II - [3 of 3] - Java Server Face...
Einführung in die Java-Webentwicklung - Part II - [3 of 3] - Java Server Face...kaftanenko
 
Basta 2016 - Test- und Releaseumgebungen in der Cloud
Basta 2016 - Test- und Releaseumgebungen in der CloudBasta 2016 - Test- und Releaseumgebungen in der Cloud
Basta 2016 - Test- und Releaseumgebungen in der CloudMarc Müller
 

Similar a Java-Webanwendungen mit Vaadin 8 (20)

Google Web Toolkit
Google Web ToolkitGoogle Web Toolkit
Google Web Toolkit
 
Workshop Vue js
Workshop Vue jsWorkshop Vue js
Workshop Vue js
 
Net@night asp.net mvc
Net@night asp.net mvcNet@night asp.net mvc
Net@night asp.net mvc
 
Enterprise UI
Enterprise UIEnterprise UI
Enterprise UI
 
GWT
GWTGWT
GWT
 
react-de.pdf
react-de.pdfreact-de.pdf
react-de.pdf
 
Gwt Techtalk Präsentation
Gwt Techtalk PräsentationGwt Techtalk Präsentation
Gwt Techtalk Präsentation
 
PAVONElive und PAVONE PCS für Java EE
PAVONElive und PAVONE PCS für Java EEPAVONElive und PAVONE PCS für Java EE
PAVONElive und PAVONE PCS für Java EE
 
Metaprogrammierung und Reflection
Metaprogrammierung und ReflectionMetaprogrammierung und Reflection
Metaprogrammierung und Reflection
 
Wicket Kurzübersicht
Wicket KurzübersichtWicket Kurzübersicht
Wicket Kurzübersicht
 
PHP im High End
PHP im High EndPHP im High End
PHP im High End
 
Team Foundation Server
Team Foundation ServerTeam Foundation Server
Team Foundation Server
 
dotnet Cologne 2013 - Windows Azure Mobile Services
dotnet Cologne 2013 - Windows Azure Mobile Servicesdotnet Cologne 2013 - Windows Azure Mobile Services
dotnet Cologne 2013 - Windows Azure Mobile Services
 
Was ist neu in .NET 4.5?
Was ist neu in .NET 4.5?Was ist neu in .NET 4.5?
Was ist neu in .NET 4.5?
 
JAX 2015 - Continuous Integration mit Java & Javascript
JAX 2015 - Continuous Integration mit Java & JavascriptJAX 2015 - Continuous Integration mit Java & Javascript
JAX 2015 - Continuous Integration mit Java & Javascript
 
Einführung in ASP.NET Core Middlewares
Einführung in ASP.NET Core MiddlewaresEinführung in ASP.NET Core Middlewares
Einführung in ASP.NET Core Middlewares
 
Web460 ppt-de-jul-wi-web-all-2020
Web460 ppt-de-jul-wi-web-all-2020Web460 ppt-de-jul-wi-web-all-2020
Web460 ppt-de-jul-wi-web-all-2020
 
Einführung in die Java-Webentwicklung - Part II - [3 of 3] - Java Server Face...
Einführung in die Java-Webentwicklung - Part II - [3 of 3] - Java Server Face...Einführung in die Java-Webentwicklung - Part II - [3 of 3] - Java Server Face...
Einführung in die Java-Webentwicklung - Part II - [3 of 3] - Java Server Face...
 
Basta 2016 - Test- und Releaseumgebungen in der Cloud
Basta 2016 - Test- und Releaseumgebungen in der CloudBasta 2016 - Test- und Releaseumgebungen in der Cloud
Basta 2016 - Test- und Releaseumgebungen in der Cloud
 
Sitecore. Ready to Start. Software Engineer
Sitecore. Ready to Start. Software EngineerSitecore. Ready to Start. Software Engineer
Sitecore. Ready to Start. Software Engineer
 

Java-Webanwendungen mit Vaadin 8

  • 1. Java-Webanwendungen mit Vaadin 8 Expertenkreis Java, 14.09.2017, GEDOPLAN Hendrik Jungnitsch, GEDOPLAN GmbH
  • 2. Vorteile Webanwendung ggü. Desktop-Anwendungen Desktop-Anwendungen/Clients werden zunehmend von Web-GUIs abgelöst Logik und Daten zentral auf Server Keine Installation von zusätzlicher Client-Software erforderlich Bei Updates, kein Aktualisieren auf Clientseite notwendig 2
  • 3. Problemstellung Webanwendung für Java-Entwickler Zugrundeliegendes Konzept unterscheidet sich deutlich von Desktop-Entwicklung Zustandslosigkeit des HTTP-Protokolls Nicht komponentenorientiert Nicht eventgetrieben Erfordert Kenntnisse nicht nur in Java, sondern auch Webtechnologien HTML, CSS, JavaScript, Ajax 3
  • 4. Vaadin Webframework für Java Für JavaScript/Ajax-gestützte Webanwendungen Entwickelt von Vaadin Ltd. Opensource (Apache-Lizenz 2.0) Aktuelle Version 8.x.x 4 (https://vaadin.com/)
  • 5. Was bietet Vaadin ? Framework für Web-Anwendungen An Desktop-Entwicklung (z. B. Swing) angelehntes Programmiermodell Abstraktion von Webtechnologien Umfangreiches Widgetset an Komponenten Eingabekomponenten, Tabellen, Trees, Menüs, usw. Server- und clientseitige Entwicklung möglich 5
  • 6. Grundlegende Funktionsweise Besteht aus Clientseitiger Engine mit Widgetset (JavaScript) Serverseitiger Engine UI-Komponenten (Java) UIs werden auf Serverseite mit Java-Objekten aufgebaut Bei Aufruf einer Seite wird zuerst die JavaScript-Engine in den Browser geladen Synchronisation von Komponenten in Client und Server per Ajax Transparent für den Entwickler 6
  • 7. Vaadin Architektur - Übersicht 7 Client (Webbrowser) Java Server JavaScript- Engine (Google-Web- Toolkit) Widgets Servlet Vaadin Komponenten GUI Anwendung Business-Logik
  • 9. Struktur der Vaadin-Anwendung Aufbau wie Standard-Webanwendung: Deployment-Desriptor WEB-INFweb.xml 9 Uis, Views und sonstige Java-Quellen Konfigurationsdateien für Java-Quellen Webapp-Root, JSP, XHTML, etc. Deployment-Deskriptors
  • 10. Demo: Eine einfache Vaadin-Anwendung 10 Title("Hello World") // Titel der Seite @Theme("valo") // Theme public class HelloWorld extends UI { @Override protected void init(VaadinRequest request) { // Inhaltsbereich definieren VerticalLayout content = new VerticalLayout(); setContent(content); // Hinzufügen einer einfachen Textausgabe content.addComponent(new Label("Hello World!")); } }
  • 11. Konfiguration der Anwendung 11 WebServlet(value = "/*", asyncSupported = true) @VaadinServletConfiguration(productionMode=false, ui=HelloWorld.class) public class DemoServlet extends VaadinServlet { } <servlet> <servlet-name>HelloWorld UI</servlet-name> <servlet-class>com.vaadin.server.VaadinServlet</servlet-class> <init-param> <param-name>ui</param-name> <param-value>de.gedoplan.seminar.vaadin.demo.HelloWorld</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>HelloWorld UI</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping>
  • 14. Formulare mit Binder Verknüpft Formulare mit (fachlichen) Java-Objekten Kein HTML-Form Verknüpfung über Zugriffsmethoden möglich = typsicher Alternativ Verknüpfung über Beanproperties binder = new Binder<>(Vortrag.class); binder.bind(titel, Vortrag::getTitel,Vortrag::setTitel); binder.bind(titel, "titel");
  • 15. Formulare mit Binder Deklaratives Zuordnen über Attribute Zuordnen zu Bean Oder separates Schreiben und Lesen @PropertyId("titel") private TextField titel binder.bindInstanceFields(this); binder.readBean(vortrag); binder.writeBean(vortrag); binder.setBean(vortrag);
  • 16. Konvertierung Umwandeln von Präsentation <-> Modell über Converter Zuweisen von Converter über Binder als Converter oder in Form von 2 Lambdaausdrücken Builder Pattern Typsicher im Falle von Zugriffsmethoden binder.forField(dauer).withConverter(new StringToLongConverter());
  • 17. Validierung Validieren über Validators Zuweisen über den Binder Kombinierbar mit Convertern -> Aufbau Converter-Validator- Pipeline Validator für Beanvalidation vorhanden BeanValidationBinder fügt diesen automatisch hinzu binder.forField(dauer).withValidator(...); binder = new BeanValidationBinder<>(Vortrag.class);
  • 18. Grid Komponente für Darstellen tabellarischer Daten Viele Konfigurationsmöglichkeiten Direktes Hinzufügen einer Collection möglich Zuweisen der Columns über Zugriffsmethoden oder Beanproperties Automatisches Paging beim Scrollen
  • 19. Grid Erstellen zu Beantyp (Automatisches Einrichten der Spalten) Zugriff auf Columns Hinzufügen einer Collection Auswahl von Items Grid<Vortrag> tabelle = new Grid<>(Vortrag.class); tabelle.getColumn("beschreibung").setHidden(true); tabelle.setItems(list) tabelle.setSelectionMode(SelectionMode.SINGLE); tabelle.addSelectionListener(e -> ...);
  • 20. DataProvider Definiert das Laden der Daten Erlaubt z. B. datenbankseitiges Paging Implementierung mit Queries für Laden einer Page und Gesamtanzahl Einfache Einbindung bestehender Services tabelle.setDataProvider((f,offset,limit) -> vortragService.load(offset,limit).stream(), vortragService::count);
  • 21. Layouts Anordnung der Elemente über Layoutmanager Verwendung erfolgt programmatisch VerticalLayou t HorizontalLayou t GridLayout AbsoluteLayou t CssLayout FormLayout
  • 22. Themes Aussehen bestimmt durch Themes Einfaches Austauschen des Look-and-Feel Arbeiten mit SCSS Aussehen von Standard-Theme Valo ist stark konfigurierbar Eigene Themes einfach als Ableitung eines Standard-Themes
  • 23. Navigation Einfaches Konzept für Navigation Erlaubt bookmarkable URLs Navigator verwaltet eine Menge von Views für eine UI View gemappt auf URI-Fragment Views werden angezeigt in dafür vorgesehenem Bereich
  • 24. Deklaratives XML Alternative zum programmatischen Aufbau Definition in HTML File Tags für die Komponenten und Container Beschreibt nur das Layout, keine Funktionalität Verknüpfung mit Komponenten in Java Klasse möglich
  • 25. Vaadin Designer Grafischer Editor für Vaadin Anwendungen einfaches Zusammenklicken der Oberflächen Arbeitet mit der deklarativen Definition Kostenpflichtig
  • 26. Erweiterbarkeit Vaadin kann einfach um Komponenten erweitert werden Serverseitige Erweiterungen können in Java geschrieben werden Möglichkeiten für Erweiterungen mit clientseitigem Anteil GWT (Google-Web-Toolkit) Typsicher Muss kompiliert werden JavaScript Ungetyped Schnellerer Entwicklungszyklus Große Auswahl an Widgets
  • 28. JavaScript Komponenten Serverseitige Komponente Verknüpfung über Connector-Methode = Einstiegspunkt Vollqualifizierter Klassenname Zustandsobjekt @JavaScript("JsHtml5TextFieldConnector.js") public class JsHtml5TextField extends AbstractJavaScriptComponent { de_gedoplan_demos_vaadin_demo_ui_components_JsHtml5TextField = function() { public class JsHtml5TextFieldState extends JavaScriptComponentState {
  • 29. Extensions Ähnlich wie eigene Komponente Kann auf bestehende Komponenten angewandt werden Fügt Funktionalität hinzu Ermöglicht es, ohne spezielles Ableiten zu erweitern So kann auch per JavaScript eine Vaadin Komponente erweitert werden TextField textField = new TextField(); JsHtml5TextFieldExtension jsHtml5TextFieldExtension = new JsHtml5TextFieldExtension(); jsHtml5TextFieldExtension.extend(textField);
  • 30. Webcomponent Addon Experimentelles Addon für einfaches Integrieren von Webcomponents (Vaadin Elements, Polymer, etc.) Eigenen Javascript-Komponenten Auch für Manipulieren der Clientseite bestehender Komponenten Erlaubt einfaches Integrieren von Client- und Serverseite
  • 31. Vaadin als Frontend für Java EE oder Spring Integration einfach über offizielle Addons Vaadin UIs und Views sind dann gemanaged und können injecten Neue Scopes: UIScoped und ViewScoped Einfaches Bereitstellen Keine Servletkonfiguration notwendig Views werden automatisch angezogen
  • 32. Vorteile von Vaadin JavaScript basiert (kein Browser Plug-in) Webtechnologie für Entwickler transparent Ermöglicht Konzentration auf das Wesentliche Cross-Browser optimiert Serverseitige Steuerung Sicherheit, Kontrolle Von Desktopentwicklung bekannte Vorgehensweise Programmatischer Aufbau der UIs Standard Java-Webprojekt Gute Erweiterbarkeit, viele Add-ons verfügbar 32
  • 33. Nachteile von Vaadin Webtechnologie für Entwickler transparent Nachteil für Webseiten-Design Serverseitige Steuerung erhöhter Netzwerkverkehr 33
  • 34. Einsatzbereiche für Vaadin Gut geeignet für Desktopähnliche Business-Applikationen im Browser Programmatisch generierte Web-GUIs Weniger gut geeignet für Webseiten 34
  • 35. Demoanwendung Sourcecode für die Demoanwendung: https://github.com/GEDOPLAN/vaadin-demo