Webentwicklung mit Vaadin 7Agenda 2 Allgemeines Architektur Client-Side Server-Side Vaadin UI...

27
Christian Dresen, Michael Gerdes, Sergej Schumilo Webentwicklung mit Vaadin 7 Theoretische und praktische Einführung in Vaadin 7

Transcript of Webentwicklung mit Vaadin 7Agenda 2 Allgemeines Architektur Client-Side Server-Side Vaadin UI...

Page 1: Webentwicklung mit Vaadin 7Agenda 2 Allgemeines Architektur Client-Side Server-Side Vaadin UI Components Praktische Einführung Praktikum von 27 Dresen, Gerdes, Schumilo | Vaadin 7

Christian Dresen, Michael Gerdes, Sergej Schumilo

Webentwicklung mit Vaadin 7

Theoretische und praktische Einführung in Vaadin 7

Page 2: Webentwicklung mit Vaadin 7Agenda 2 Allgemeines Architektur Client-Side Server-Side Vaadin UI Components Praktische Einführung Praktikum von 27 Dresen, Gerdes, Schumilo | Vaadin 7

Agenda

2

Allgemeines

Architektur

Client-Side

Server-Side

Vaadin UI Components

Praktische Einführung

Praktikum

von 27 Dresen, Gerdes, Schumilo | Vaadin 7 03.12.2014

Page 3: Webentwicklung mit Vaadin 7Agenda 2 Allgemeines Architektur Client-Side Server-Side Vaadin UI Components Praktische Einführung Praktikum von 27 Dresen, Gerdes, Schumilo | Vaadin 7

Allgemeines

3 von 27 Dresen, Gerdes, Schumilo | Vaadin 7 03.12.2014

Page 4: Webentwicklung mit Vaadin 7Agenda 2 Allgemeines Architektur Client-Side Server-Side Vaadin UI Components Praktische Einführung Praktikum von 27 Dresen, Gerdes, Schumilo | Vaadin 7

Allgemeines – Was ist Vaadin?

4

Freies Framework (Apache Lizenz 2.0)

Server-seitige Ausführung

Kein Browser-Plugin notwendig

Client-Seite

Ajax Framework Google Web Toolkit

Java-to-JavaScript Compiler

von 27 Dresen, Gerdes, Schumilo | Vaadin 7 03.12.2014

Quelle: http://www.digitalnext.de/wp-content/uploads/

2013/01/top-best-browsers.jpg

Quelle: http://www.have2code.com/wp-content/

uploads/2013/12/gwt1.png

Page 5: Webentwicklung mit Vaadin 7Agenda 2 Allgemeines Architektur Client-Side Server-Side Vaadin UI Components Praktische Einführung Praktikum von 27 Dresen, Gerdes, Schumilo | Vaadin 7

Allgemeines – Was ist Vaadin?

5

Gesamte Anwendung wird in Java implementiert

Ereignisgesteuerte Programmierung

Parallelen zu GUI-Programmierung

Vaadin macht das Design

Verwendung von Themes

von 27 Dresen, Gerdes, Schumilo | Vaadin 7 03.12.2014

Quelle: http://www.chip.de/ii/7/8/7/

9/6/2/0fc51f82e036e1d3.jpg

Quelle: https://vaadin.com/demo

Page 6: Webentwicklung mit Vaadin 7Agenda 2 Allgemeines Architektur Client-Side Server-Side Vaadin UI Components Praktische Einführung Praktikum von 27 Dresen, Gerdes, Schumilo | Vaadin 7

Allgemeines – Geschichte I

6

2002: quelloffenes Framework: Millstone 3

Ajax-basierte Client-Kommunikation und Renderengine

2006: Konzept separat als kommerzielles Produkt entwickelt

Serverseitige Vaadin-API kompatibel mit Millstone API

2007: Produktname IT Mill Toolkit

Version 4 freigegeben

Proprietäre Ajax Implementation für die Clientseite

Ende 2007: Proprietäre Ajax Implementation aufgegeben

Google Web Tool Kit integriert für Darstellung von Client-Seitigen Komponenten

Produktlizenz wurde auf die freie Apache 2.0 – Lizenz geändert

von 27 Dresen, Gerdes, Schumilo | Vaadin 7 03.12.2014

Quelle: http://de.wikipedia.org/wiki/Vaadin

Page 7: Webentwicklung mit Vaadin 7Agenda 2 Allgemeines Architektur Client-Side Server-Side Vaadin UI Components Praktische Einführung Praktikum von 27 Dresen, Gerdes, Schumilo | Vaadin 7

Allgemeines – Geschichte II

7

März 2009: Veröffentlichung einer Produktionsfähigen Version von IT Mill 5.0

Mai 2009: IT Mill Toolkit wird in Vaadin unbenannt

Vorabfreigabe Version 6

März 2010 Vaadin Directory

Ein Portal zur Verbreitung von kommerziellen und Open-Source Erweiterungen

Februar 2011: Kommerzielles Supportmodell: Vaadin Pro Accounts

März 2013: Vaadin 7 – Erste Hauptversion seit der Umbenennung 2009

von 27 Dresen, Gerdes, Schumilo | Vaadin 7 03.12.2014

Quelle: http://de.wikipedia.org/wiki/Vaadin

Page 8: Webentwicklung mit Vaadin 7Agenda 2 Allgemeines Architektur Client-Side Server-Side Vaadin UI Components Praktische Einführung Praktikum von 27 Dresen, Gerdes, Schumilo | Vaadin 7

Allgemeines – Add-On‘s

8

Top Downloads

von 27 Dresen, Gerdes, Schumilo | Vaadin 7 03.12.2014

Stand 02. Dezember 2014, Datenquelle: vaadin.com

Page 9: Webentwicklung mit Vaadin 7Agenda 2 Allgemeines Architektur Client-Side Server-Side Vaadin UI Components Praktische Einführung Praktikum von 27 Dresen, Gerdes, Schumilo | Vaadin 7

Allgemeines – Add-On‘s: Vaadin Charts

9 von 27 Dresen, Gerdes, Schumilo | Vaadin 7 03.12.2014

Quelle: https://vaadin.com/directory#addon/vaadin-charts

Page 10: Webentwicklung mit Vaadin 7Agenda 2 Allgemeines Architektur Client-Side Server-Side Vaadin UI Components Praktische Einführung Praktikum von 27 Dresen, Gerdes, Schumilo | Vaadin 7

Technischer Hintergrund

10 von 27 Dresen, Gerdes, Schumilo | Vaadin 7 03.12.2014

Page 11: Webentwicklung mit Vaadin 7Agenda 2 Allgemeines Architektur Client-Side Server-Side Vaadin UI Components Praktische Einführung Praktikum von 27 Dresen, Gerdes, Schumilo | Vaadin 7

Architektur

11

Strikte Trennung durch MVC-Modell

Webbrowser Content repräsentiert die View

Web Applikation repräsentiert den Controller

Back-end repräsentiert das Modell

Asynchrone JavaScript Kommunikation

In Abhängigkeit der Komponenten, werden

Veränderungen an den Server geschickt

von 27 Dresen, Gerdes, Schumilo | Vaadin 7 03.12.2014

Page 12: Webentwicklung mit Vaadin 7Agenda 2 Allgemeines Architektur Client-Side Server-Side Vaadin UI Components Praktische Einführung Praktikum von 27 Dresen, Gerdes, Schumilo | Vaadin 7

Architektur

12

Vaadin Komponenten bestehen aus:

Client-Side Code

JavaScript

Server-Side Code

Java

Entwickelt wird hauptsächlich Java-Code

Abgesehen von CSS / HTML

von 27 Dresen, Gerdes, Schumilo | Vaadin 7 03.12.2014

Page 13: Webentwicklung mit Vaadin 7Agenda 2 Allgemeines Architektur Client-Side Server-Side Vaadin UI Components Praktische Einführung Praktikum von 27 Dresen, Gerdes, Schumilo | Vaadin 7

Client-Side (Web Browser)

13

HTML und JavaScript

Client-Side Engine basiert auf JavaScript

Mithilfe des Vaadin Client Compiler übersetzt

Dieser basiert auf dem Google Web Toolkit (GWT) Java-to-JavaScript Compiler

Standardmäßig JSON

Remote Procedure Calls (RPC) bei umfangreichen Übertragungen

von 27 Dresen, Gerdes, Schumilo | Vaadin 7 03.12.2014

Page 14: Webentwicklung mit Vaadin 7Agenda 2 Allgemeines Architektur Client-Side Server-Side Vaadin UI Components Praktische Einführung Praktikum von 27 Dresen, Gerdes, Schumilo | Vaadin 7

Client-Side (Web Browser)

14 von 27 Dresen, Gerdes, Schumilo | Vaadin 7 03.12.2014

Page 15: Webentwicklung mit Vaadin 7Agenda 2 Allgemeines Architektur Client-Side Server-Side Vaadin UI Components Praktische Einführung Praktikum von 27 Dresen, Gerdes, Schumilo | Vaadin 7

Client-Side (Web Browser)

15 von 27 Dresen, Gerdes, Schumilo | Vaadin 7 03.12.2014

{"syncId":3,

"changes":[[

"change",{"pid":"62"},

["23",{

"id":"62",

"locale":"de",

"format":"dd.MM.yyyy",

"strict":true,

"wn":false,

"parsable":true,

"v":{

"day":10,

"month":12,

"year":2014

}

}

]]],

"state":{

"62":{

"errorMessage":"<div>Datum&#32;muss&#32;vor&#32;aktueller&#32;Zeit&#32;liegen<\/div>\n",

"modified":true

},"54":{

"centered":false,

"positionX":460,

"positionY":25

}

},}

Page 16: Webentwicklung mit Vaadin 7Agenda 2 Allgemeines Architektur Client-Side Server-Side Vaadin UI Components Praktische Einführung Praktikum von 27 Dresen, Gerdes, Schumilo | Vaadin 7

Server-Side (Application Server)

16 von 27 Dresen, Gerdes, Schumilo | Vaadin 7 03.12.2014

Quelle: https://vaadin.com/book/-/page/application.html

Page 17: Webentwicklung mit Vaadin 7Agenda 2 Allgemeines Architektur Client-Side Server-Side Vaadin UI Components Praktische Einführung Praktikum von 27 Dresen, Gerdes, Schumilo | Vaadin 7

Vaadin UI Components

17 von 27 Dresen, Gerdes, Schumilo | Vaadin 7 03.12.2014

Quelle: https://vaadin.com/book/-/page/components.html

Page 18: Webentwicklung mit Vaadin 7Agenda 2 Allgemeines Architektur Client-Side Server-Side Vaadin UI Components Praktische Einführung Praktikum von 27 Dresen, Gerdes, Schumilo | Vaadin 7

Praktische Einführung

18 von 27 Dresen, Gerdes, Schumilo | Vaadin 7 03.12.2014

Page 19: Webentwicklung mit Vaadin 7Agenda 2 Allgemeines Architektur Client-Side Server-Side Vaadin UI Components Praktische Einführung Praktikum von 27 Dresen, Gerdes, Schumilo | Vaadin 7

Konfiguration über Annotationen

19 von 27 Dresen, Gerdes, Schumilo | Vaadin 7 03.12.2014

@Theme("vaadin")

public class VaadintestUI extends UI {

@WebServlet(value = "/*", asyncSupported = true)

@VaadinServletConfiguration(productionMode = false, ui = VaadintestUI.class)

public static class Servlet extends VaadinServlet {

}

@Override

protected void init(VaadinRequest request) {

}

}

Page 20: Webentwicklung mit Vaadin 7Agenda 2 Allgemeines Architektur Client-Side Server-Side Vaadin UI Components Praktische Einführung Praktikum von 27 Dresen, Gerdes, Schumilo | Vaadin 7

View Programmierung

20 von 27 Dresen, Gerdes, Schumilo | Vaadin 7 03.12.2014

GridLayout layout = new GridLayout(3,0);

this.setLayout(layout);

final Label lblAusgabe = new Label();

final TextField txtEingabe = new TextField();

final Button btnSubmit = new Button(“Click Me");

this.add(lblAusgabe);

this.add(txtEingabe);

this.add(btnSubmit);

btnSubmit.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent arg0) {

lblAusgabe.setText(txtEingabe.getText());

}

});

Java AWT

final VerticalLayout layout = new VerticalLayout();

this.setContent(layout);

final Label lblAusgabe = new Label();

final TextField txtEingabe = new TextField();

final Button button = new Button("Click Me");

layout.addComponent(lblAusgabe);

layout.addComponent(txtEingabe);

layout.addComponent(button);

button.addClickListener(new Button.ClickListener() {

@Override

public void buttonClick(ClickEvent event) {

lblAusgabe.setValue(txtEingabe.getValue());

}

});

Vaadin 7

Page 21: Webentwicklung mit Vaadin 7Agenda 2 Allgemeines Architektur Client-Side Server-Side Vaadin UI Components Praktische Einführung Praktikum von 27 Dresen, Gerdes, Schumilo | Vaadin 7

Model – Auf Membervariablen zugreifen

21 von 27 Dresen, Gerdes, Schumilo | Vaadin 7 03.12.2014

FormLayout form = new FormLayout();

form.setImmediate(true);

BeanItem<MyBean> item = new BeanItem<MyBean>(myBean);

BeanFieldGroup<MyBean> binder = new BeanFieldGroup<MyBean>(MyBean.class);

binder.setItemDataSource(item);

form.addComponent(binder.buildAndBind("memberVariable","Caption"));

binder.getField("memberVariable").setRequired(true);

binder.getField("memberVariable").setBuffered(false);

BeanItem<MyBean> item = new BeanItem<MyBean>(myBean);

item.getItemProperty("memberVariable")

Page 22: Webentwicklung mit Vaadin 7Agenda 2 Allgemeines Architektur Client-Side Server-Side Vaadin UI Components Praktische Einführung Praktikum von 27 Dresen, Gerdes, Schumilo | Vaadin 7

Model – Auswahlbox erstellen

22 von 27 Dresen, Gerdes, Schumilo | Vaadin 7 03.12.2014

ArrayList<MyBean> myBeanList = new ArrayList<MyBean>();

myBeanList.add(new MyBean());

BeanItemContainer<MyBean> myBeanContainer;

myBeanContainer = new BeanItemContainer<MyBean>(MyBean.class, myBeanList);

ComboBox cmbBoxMyBean = new ComboBox("cmbBoxMyBeanCaption");

cmbBoxMyBean.setContainerDataSource(myBeanContainer);

Page 23: Webentwicklung mit Vaadin 7Agenda 2 Allgemeines Architektur Client-Side Server-Side Vaadin UI Components Praktische Einführung Praktikum von 27 Dresen, Gerdes, Schumilo | Vaadin 7

Session Scopes

23

Zwei Scopes bei Vaadin

UI Session

Pro geöffnetes Fenster eine eigene Session zur Verwaltung des Fensterinhalts

Zugriff mit

VaadinSession

Pro User eine Session, d.h. von allen Tabs und Fenstern eines Browsers

Zugriff Thread-safe über

von 27 Dresen, Gerdes, Schumilo | Vaadin 7 03.12.2014

UI.getCurrent().getSession().setAttribute(MyBean.class, new MyBean());

UI.getCurrent().getSession().setAttribute („ValueID“, Value );

try {

VaadinSession.getCurrent().getLockInstance().lock();

VaadinSession.getCurrent().setAttribute(VALUE_ID, "some value");

} finally {

VaadinSession.getCurrent().getLockInstance().unlock();

}

Page 24: Webentwicklung mit Vaadin 7Agenda 2 Allgemeines Architektur Client-Side Server-Side Vaadin UI Components Praktische Einführung Praktikum von 27 Dresen, Gerdes, Schumilo | Vaadin 7

Praktikumseinführung

24 von 27 Dresen, Gerdes, Schumilo | Vaadin 7 03.12.2014

Page 25: Webentwicklung mit Vaadin 7Agenda 2 Allgemeines Architektur Client-Side Server-Side Vaadin UI Components Praktische Einführung Praktikum von 27 Dresen, Gerdes, Schumilo | Vaadin 7

Vorbereitungen

25

Benötigt wird Eclipse Kepler (Link in Praktikumsaufgabe)

Separaten Workspace benutzen

Vaadin Eclipse Plug-In herunterladen

von 27 Dresen, Gerdes, Schumilo | Vaadin 7 03.12.2014

Page 26: Webentwicklung mit Vaadin 7Agenda 2 Allgemeines Architektur Client-Side Server-Side Vaadin UI Components Praktische Einführung Praktikum von 27 Dresen, Gerdes, Schumilo | Vaadin 7

Praktikum

26

Vorgegebener Quelltext

Beinhaltet:

das Modell

Modell-Tests

Grundgerüst

Model

Interfaces zur Nutzung

von 27 Dresen, Gerdes, Schumilo | Vaadin 7 03.12.2014

Page 27: Webentwicklung mit Vaadin 7Agenda 2 Allgemeines Architektur Client-Side Server-Side Vaadin UI Components Praktische Einführung Praktikum von 27 Dresen, Gerdes, Schumilo | Vaadin 7

Praktikumsaufgabe Demo

27 von 27 Dresen, Gerdes, Schumilo | Vaadin 7 03.12.2014