SlideShare una empresa de Scribd logo
1 de 74
Andreas Hubmer/Markus Popp | Cenarion

GWT: Eintauchen in MVP und
Internationalisierung
•
•
•
•

Enterprise-Applikationen
Versicherungsbranche
Java
3 Jahre GWT

2
Ablauf
• MVP
– GWT & MVP
– Activities/Places

• Internationalisierung
• Client-Performance

3
MVP = Model View Presenter
Model View Presenter
• 1996
• Verwandt mit MVC
• Ziele
– Verantwortlichkeiten trennen
– Flexibilität von UIs bei Änderungen des
Models erhöhen

5
MVC - MVP
Model

Model

Presenter
Controller

View
View
6
Fragen
Data

UI

How do I manage
my data?

How does the user
interact with my data?

7
Data
What is my data?

8
Data
What is my data?

How do I specify my data?

9
Data
What is my data?

How do I specify my data?
How do I change my data?

10
UI
How do I display my data?

11
UI
How do I display my data?

How do events map into changes in my
data?

12
UI
How do I display my data?

How do events map into changes in my
data?
How do I put it all together?

13
How do I partition my application between
client and server?

Security

14
Vorteile von MVP
• Trennung von Model und View
→ mehr Flexibilität

• Ein Model – mehrere Views
• Testbarkeit
• Undo/Redo

15
MVP in GWT
Model

Datenanbindung,
Businesstransaktionen
Server

Client

Presenter

View

View mit Daten füttern,
Applikationslogik

UI-Widgets, I18n,
Event-Handling, Display-Logik
16
Display-Logik vs.
Applikationslogik

Unit-Test → Applikationslogik
17
Warum MVP in GWT?
• Arbeitsteilung
– Lose Kopplung UI – Logik
– Struktur erleichtert Orientierung

• Testbarkeit

18
Warum MVP in GWT?
• Arbeitsteilung
• Testbarkeit
– UI-Komponenten in GWT:
• Schwer testbar
• Tests langsam

– Abgrenzung Applikations-Logik von
Display-Logik!

19
Activities & Places
• Browser-History
• URL-Fragment = Place
– .../index.html#SearchPlace!bmw!pkw

• Place repräsentiert State
• Activity
– Daten laden & UI initialisieren
– Kommunikation mit Serverseite
20
State
Place

Session

Primitive Werte
Objekt-Ids

Authentifizierung
Sprache

21
Presenter = Activity
Place

initialisiert

Hält State für

Presenter
(Activity)
Model

aktualisiert

View

Kommuniziert

22
Beispiel: Suche

23
Beispiel: SearchView.ui.xml
<!DOCTYPE ui:UiBinder SYSTEM
"http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui">
<g:Label text="Beschädigtes Fahrzeug Suche" />
<g:Label text="Fahrgestell-Nr."

horizontalAlignment="ALIGN_RIGHT" />
<g:TextBox ui:field="vehicleId" />
<g:Label text="Marke" />
<g:TextBox ui:field="brand" />
<g:Label text="Fahrzeugtyp"/>
<g:ListBox ui:field="type" />
<g:Button text="OK" />
<g:Button text="Zurücksetzen" />
<g:VerticalPanel ui:field="tblSearchResults" />
</ui:UiBinder>

24
Beispiel: SearchView
public class SearchView extends Composite {
@UiField TextBox vehicleId, brand;
@UiField ListBox type;
private SearchPresenter presenter;
@UiHandler("btnOk")
public void onOkClick(ClickEvent event) {
presenter.searchOkClicked(
vehicleId.getText(),
brand.getText(),
type.getValue());
}
}

25
Beispiel: Presenter
private DamagedVehicleRequest request;
private SearchView view;
public void searchOkClicked(String vin, String brand,
String type) {
if (! validVehicleId(vin))

view.setErrorText("Fehlermeldung …");
else
request.search(vin, brand, type).
fire(new Receiver …);
}
26
Klassen/Dateien
SearchPlace

Place

ActivityMapper

SearchPresenter

AbstractActivity

ClientFactory

SearchView

Composite

UiBinder

SearchView.ui.xml
27
Interfaces?

SearchPresenter

ISearchPresenter

SearchView

ISearchView

28
Testbarkeit?

29
Beispiel: Presenter
private DamagedVehicleRequest request;
private SearchView view;
public void searchOkClicked(String vin, String brand,
String type) {
if (! validVehicleId(vin))

view.setErrorText("Fehlermeldung …");
else
request.search(vin, brand, type).
fire(new Receiver …);
}
30
Beispiel: Presenter-Test
private SearchPresenter presenter;
private DamagedVehicleRequest request;
private SearchView view;
@Before
public void setup() {

view = Mockito.mock(SearchView.class);
request = Mockito.mock(DamagedVehicleRequest.class);
presenter = new SearchPresenter(view, request, …);
}

31
Beispiel: Presenter-Test
@Test
public void testSearch() {
presenter.searchOkClicked("", "bmw", "pkw");
Mockito.verify(request).search("", "bmw", "pkw");
}
@Test
public void testSearchInvalidVin() {
presenter.searchOkClicked("1", "bmw", "pkw");
Mockito.verify(view).setErrorText("Fehlermeldung …");
Mockito.verifyZeroInteractions(request);
}
32
GWTTestCase
• Für natives Javascript
• Langsam (HtmlUnit-Startup)
• Simulation von Usereingaben nicht
trivial
• JUnit 3

33
Fragen zu MVP?

34
Eitrige
mit Buckel
und 16er Blech

35
messages_de_at.properties
sausage=Eitrige
breadEnd=Buckel
beer=16er Blech

messages_de_de.properties
sausage=Käsekrainer
breadEnd=Brotendstück
beer=Ottakringer

36
Internationalisierung
Internationalisierung
• .properties-Dateien
greeting = Hallo!

• Platzhalter für Parameter
greeting = Hallo {0}!

• UTF-8
greeting = Grüß euch! ☺

38
Static String Internationalization
• Auflösung vom Compiler
– statische Werte in den generierten Dateien

• Überprüfungen vom Compiler
• Typisierung durch Interfaces

39
Permutationen
Englisch

Deutsch

Firefox

Internet
Explorer

FF
en

FF
de

IE
en

IE
de
40
Interfaces
greeting = Grüß euch! ☺
public interface UIMessages extends Messages {

String greeting();
}
UIMessages msgs = GWT.create(UIMessages.class);
String text = msgs.greeting();

41
Interfaces
gwtsample.greeting = Grüß euch! ☺
public interface UIMessages extends Messages {
@Key("gwtsample.greeting")
String greeting();
}
UIMessages msgs = GWT.create(UIMessages.class);
String text = msgs.greeting();

• Constants Interface
• Messages Interface
42
Constants Interface
• Konstanten ohne Parameter
• Typisierung der Konstanten
– Primitive Datentypen
– Strings
– String-Arrays
– String-Maps

43
Constants Beispiel
digitsAfterDecimalPoint = 2
public interface UIConstants extends Constants {
@DefaultIntValue(3)
int digitsAfterDecimalPoint();
}
UIConstants constants = GWT.create(UIConstants.class);
int digits = constants.digitsAfterDecimalPoint();

44
Messages Interface
• Parameter in Texten
• Rückgabewert String
permissionDenied = Error {0}: User {1} does not have
permission to access {2}

public interface ErrorMessages extends Messages {
String permissionDenied(int errorCode,
String username,
String resourceName);
}
45
Messages Interface
• Parameter in Texten
• Rückgabewert String
permissionDenied = Error {0}: User {1} does not have
permission to access {2}

Kompilierfehler

public interface ErrorMessages extends Messages {
String permissionDenied(int errorCode,
String username);
}
46
Messages ausgeben
• Java Code
ErrorMessages errorMsgs =
GWT.create(ErrorMessages.class);
Label errorLabel = new Label();
errorLabel.setText(errorMsgs.permissionDenied(
550, "username", "file.txt"));

• UIBinder XML
47
Beispiel: Suche

48
Beispiel: SearchView.ui.xml
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui">
<g:Label text="Beschädigtes Fahrzeug Suche" />
<g:Label text="Fahrgestell-Nr." />
<g:TextBox ui:field="vehicleId" />
<g:Label text="Marke" />
<g:TextBox ui:field="brand" />
<g:Label text="Fahrzeugtyp" />
<g:ListBox ui:field="type" />
<g:Button text="OK" />
<g:Button text="Zurücksetzen" />
<g:VerticalPanel ui:field="tblSearchResults" />
</ui:UiBinder>

49
Beispiel: SearchView.ui.xml
<ui:with field="msgs" type="com.cenarion.client.UIMessages" />
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui">
<g:Label text="{msgs.damagedVehicleSearch}" />
<g:Label text="{msgs.vehicleIdNo}" />
<g:TextBox ui:field="vehicleId" />
<g:Label text="{msgs.brand}" />
<g:TextBox ui:field="brand" />
<g:Label text="{msgs.type}" />
<g:ListBox ui:field="type" />
<g:Button text="{msgs.ok}" />
<g:Button text="{msgs.reset}" />
<g:VerticalPanel ui:field="tblSearchResults" />
</ui:UiBinder>

50
Messages Features
•
•
•
•

Formatierung von Parametern
Pluralformen
Select Forms
HTML in den lokalisierten Texten

51
Formatierung
• Java-MessageFormat
• Bsp. Datumsformat
@DefaultMessage("{0,date,medium}")
String formatDate(Date date);

52
Pluralformen
• Deutsch/Englisch
– 1 Produkt (n=1)
– 2 Produkte (n=0, n>1)

• Französisch
– 0/1 produit (n=0, n=1)
– 2 produits (n>1)

• Arabisch: 0, 1, 2, wenige, viele
53
Pluralformen Beispiel
products[one] = {0} Produkt
products = {0} Produkte

public interface I18nUIMessages extends Messages {
String products(@PluralCount int numProducts);
}
I18nUIMessages messages = GWT.create(I18nUIMessages.class);
lblProducts0.setText(messages.products(0));
lblProducts1.setText(messages.products(1));
lblProducts2.setText(messages.products(2));
54
Pluralformen Beispiel
products[one] = {0} Produkt
products = {0} Produkte

0 Produkte
1 Produkt
2 Produkte

products[one] = {0} produit
products = {0} produits

0 produit
1 produit
2 produits

55
Select Forms
title[MALE] = Sehr geehrter Herr {0}!
title[FEMALE] = Sehr geehrte Frau {0}!
title = Sehr geehrte Damen und Herren!
public enum Gender {
MALE, FEMALE, UNKNOWN
}
public interface I18nUIMessages extends Messages {
String title(String name, @Select Gender gender);
}
msgs.title("Max Mustermann", Gender.MALE);

Sehr geehrter Herr Max Mustermann!
56
HTML in Texten
greeting = Hallo <b>{0}</b>!
public interface I18nUIMessages extends Messages {
String greeting(String name);
}
String name = "<i>XSS-Attacke</i>";
htmlGreeting.setHTML(messages.greeting(name));

Hallo XSS-Attacke!
57
SafeHtml
• Vermeiden von XSS
• Wrapper für Strings
– vertrauenswürdiges HTML-Markup
public interface SafeHtml extends Serializable {
String asString();
}

• Zusätzliche Typsicherheit
58
HTML in Texten
greeting = Hallo <b>{0}</b>!
public interface I18nUIMessages extends Messages {
SafeHtml greeting(String name);
}
String name = "<i>XSS-Attacke</i>";
htmlGreeting.setHTML(messages.greeting(name));

Hallo <i>XSS-Attacke</i>!
59
Grenzen clientseitiger I18N
• Daten die vom Server kommen
– Werte aus einer Datenbank
– Serverseitige Validierungsfehler

60
Fragen zur I18N?

61
Client-Performance
Client-Performance

63
Client-Performance
• JavaScript
• IE8 
• GWT-Compiler: -style OBF/PRETTY

64
Repeating Commands
• Problem: Ausführungszeit und
#Statements
• Lösung: Pausen einlegen
Long-Running Task

Browser-Event-Loop

65
Repeating Commands
List<Case> caseList = …
for (Case case : caseList) {
checkAndShow(case);
}

66
Repeating Commands
List<Case> caseList = …
final Iterator<T> caseIterator = caseList.iterator();
Scheduler.get().scheduleIncremental(new RepeatingCommand() {
@Override
public boolean execute() {
int counter = 0;
while (caseIterator.hasNext()) {
if (counter++ == 50)

return true; // execute again
checkAndShow(caseIterator.next());
}
return false;
}

});

67
Repeating Commands
Init
Init

Long-Running Task
RC

RC

Finish

RC

RC

RC

RC

RC

RC

Finish

Ausführungsreihenfolge:
Init

Finish

RC

RC

Scheduler.scheduleIncremental
68
Server-Antwort parsen
• Problem: Große Antwort → Viel Zeit
• Lösung: Daten reduzieren
– Stück für Stück
– Encoding von Listen

69
Encoding von Listen
• Beispiel: Postleitzahlen
class Plz { String plz; String name; }

• List<Plz>: 650KB
• List<String>: 50KB
String plzString = plz + " " + name;

70
Encoding von Listen
• List<Plz>

• List<String>

[ {"O": 2,
"D": {"plz": "4020",
"name": "Linz"}},
{"O": 1,
"D": {"plz": "1040",
"name": "Wien"}},
…
],
[ {"O": 1}, {"O": 2}, … ]

[],
[
"1040 Wien",
"4020 Linz",
…
]

71
Code-Splitting
• Problem: Startup-Zeit
• Lösung: JS-Code splitten
– Beispiel: UIs für spezielle Benutzergruppen
– GWT.runAsync(
new RunAsyncCallback(…))

72
Zusammenfassung
• MVP

• Internationalisierung

• Client-Performance
andreas.hubmer@cenarion.com
markus.popp@cenarion.com

http://www.cenarion.com/techblog

Más contenido relacionado

La actualidad más candente

WebGL - 3D im Browser - Erfahrungsbericht mit BabylonJS
WebGL - 3D im Browser - Erfahrungsbericht mit BabylonJSWebGL - 3D im Browser - Erfahrungsbericht mit BabylonJS
WebGL - 3D im Browser - Erfahrungsbericht mit BabylonJSOliver Hader
 
JSF 2 Kompositkomponenten (JAX 2012)
JSF 2 Kompositkomponenten (JAX 2012)JSF 2 Kompositkomponenten (JAX 2012)
JSF 2 Kompositkomponenten (JAX 2012)Michael Kurz
 
Vor- und Nachteile von Web Components mit Polymer gegenüber AngularJS ohne P...
Vor- und Nachteile von Web Components mit Polymer gegenüber AngularJS ohne P...Vor- und Nachteile von Web Components mit Polymer gegenüber AngularJS ohne P...
Vor- und Nachteile von Web Components mit Polymer gegenüber AngularJS ohne P...Oliver Hader
 
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
 
Web-GUIs mit Vaadin
 Web-GUIs mit Vaadin Web-GUIs mit Vaadin
Web-GUIs mit Vaadingedoplan
 
Java-Webanwendungen mit Vaadin 8
Java-Webanwendungen mit Vaadin 8Java-Webanwendungen mit Vaadin 8
Java-Webanwendungen mit Vaadin 8gedoplan
 
Progressive Web Apps mit Angular
Progressive Web Apps mit AngularProgressive Web Apps mit Angular
Progressive Web Apps mit AngularJens Binfet
 
WPF Dos n Don'ts - der WPF Rundumschlag
WPF Dos n Don'ts - der WPF RundumschlagWPF Dos n Don'ts - der WPF Rundumschlag
WPF Dos n Don'ts - der WPF RundumschlagHendrik Lösch
 
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
 
Wie viel Client braucht das Web?JSF, Vaadin und AngularJS im Vergleich
Wie viel Client braucht das Web?JSF, Vaadin und AngularJS im VergleichWie viel Client braucht das Web?JSF, Vaadin und AngularJS im Vergleich
Wie viel Client braucht das Web?JSF, Vaadin und AngularJS im Vergleichgedoplan
 
Wieviel Client braucht das Web?
Wieviel Client braucht das Web?Wieviel Client braucht das Web?
Wieviel Client braucht das Web?gedoplan
 
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
 
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
 
CodeTalks Vortrag: Automatisierung mit Ansible & Jenkins @ LeanIX Enterprise ...
CodeTalks Vortrag: Automatisierung mit Ansible & Jenkins @ LeanIX Enterprise ...CodeTalks Vortrag: Automatisierung mit Ansible & Jenkins @ LeanIX Enterprise ...
CodeTalks Vortrag: Automatisierung mit Ansible & Jenkins @ LeanIX Enterprise ...LeanIX GmbH
 
MEAN SCS in der Cloud
MEAN SCS in der CloudMEAN SCS in der Cloud
MEAN SCS in der CloudTorsten Fink
 
Schnelle Winkel: 10x schnellere Webapps mit AngularJS und JEE
Schnelle Winkel: 10x schnellere Webapps mit AngularJS und JEESchnelle Winkel: 10x schnellere Webapps mit AngularJS und JEE
Schnelle Winkel: 10x schnellere Webapps mit AngularJS und JEEBenjamin Schmid
 
Mehrere Apps, ein Backend: Windows Azure Mobile Services in der Praxis
Mehrere Apps, ein Backend: Windows Azure Mobile Services in der PraxisMehrere Apps, ein Backend: Windows Azure Mobile Services in der Praxis
Mehrere Apps, ein Backend: Windows Azure Mobile Services in der PraxisJan Hentschel
 

La actualidad más candente (20)

WebGL - 3D im Browser - Erfahrungsbericht mit BabylonJS
WebGL - 3D im Browser - Erfahrungsbericht mit BabylonJSWebGL - 3D im Browser - Erfahrungsbericht mit BabylonJS
WebGL - 3D im Browser - Erfahrungsbericht mit BabylonJS
 
JSF 2 Kompositkomponenten (JAX 2012)
JSF 2 Kompositkomponenten (JAX 2012)JSF 2 Kompositkomponenten (JAX 2012)
JSF 2 Kompositkomponenten (JAX 2012)
 
Vor- und Nachteile von Web Components mit Polymer gegenüber AngularJS ohne P...
Vor- und Nachteile von Web Components mit Polymer gegenüber AngularJS ohne P...Vor- und Nachteile von Web Components mit Polymer gegenüber AngularJS ohne P...
Vor- und Nachteile von Web Components mit Polymer gegenüber AngularJS ohne P...
 
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
 
Web Components
Web ComponentsWeb Components
Web Components
 
Web-GUIs mit Vaadin
 Web-GUIs mit Vaadin Web-GUIs mit Vaadin
Web-GUIs mit Vaadin
 
Java-Webanwendungen mit Vaadin 8
Java-Webanwendungen mit Vaadin 8Java-Webanwendungen mit Vaadin 8
Java-Webanwendungen mit Vaadin 8
 
Progressive Web Apps mit Angular
Progressive Web Apps mit AngularProgressive Web Apps mit Angular
Progressive Web Apps mit Angular
 
Feature Flags mit Togglz
Feature Flags mit TogglzFeature Flags mit Togglz
Feature Flags mit Togglz
 
WPF Dos n Don'ts - der WPF Rundumschlag
WPF Dos n Don'ts - der WPF RundumschlagWPF Dos n Don'ts - der WPF Rundumschlag
WPF Dos n Don'ts - der WPF Rundumschlag
 
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
 
Wie viel Client braucht das Web?JSF, Vaadin und AngularJS im Vergleich
Wie viel Client braucht das Web?JSF, Vaadin und AngularJS im VergleichWie viel Client braucht das Web?JSF, Vaadin und AngularJS im Vergleich
Wie viel Client braucht das Web?JSF, Vaadin und AngularJS im Vergleich
 
Factory Method Design Pattern
Factory Method Design PatternFactory Method Design Pattern
Factory Method Design Pattern
 
Wieviel Client braucht das Web?
Wieviel Client braucht das Web?Wieviel Client braucht das Web?
Wieviel Client braucht das Web?
 
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
 
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
 
CodeTalks Vortrag: Automatisierung mit Ansible & Jenkins @ LeanIX Enterprise ...
CodeTalks Vortrag: Automatisierung mit Ansible & Jenkins @ LeanIX Enterprise ...CodeTalks Vortrag: Automatisierung mit Ansible & Jenkins @ LeanIX Enterprise ...
CodeTalks Vortrag: Automatisierung mit Ansible & Jenkins @ LeanIX Enterprise ...
 
MEAN SCS in der Cloud
MEAN SCS in der CloudMEAN SCS in der Cloud
MEAN SCS in der Cloud
 
Schnelle Winkel: 10x schnellere Webapps mit AngularJS und JEE
Schnelle Winkel: 10x schnellere Webapps mit AngularJS und JEESchnelle Winkel: 10x schnellere Webapps mit AngularJS und JEE
Schnelle Winkel: 10x schnellere Webapps mit AngularJS und JEE
 
Mehrere Apps, ein Backend: Windows Azure Mobile Services in der Praxis
Mehrere Apps, ein Backend: Windows Azure Mobile Services in der PraxisMehrere Apps, ein Backend: Windows Azure Mobile Services in der Praxis
Mehrere Apps, ein Backend: Windows Azure Mobile Services in der Praxis
 

Similar a GWT: Eintauchen in MVP und Internationalisierung

Anforderungsanalyse und UML Grundlagen
Anforderungsanalyse und UML GrundlagenAnforderungsanalyse und UML Grundlagen
Anforderungsanalyse und UML GrundlagenChristian Baranowski
 
Große Applikationen mit AngularJS
Große Applikationen mit AngularJSGroße Applikationen mit AngularJS
Große Applikationen mit AngularJSSebastian Springer
 
2009 - DNC: Silverlight ohne UI - Nur als Cache
2009 - DNC: Silverlight ohne UI - Nur als Cache2009 - DNC: Silverlight ohne UI - Nur als Cache
2009 - DNC: Silverlight ohne UI - Nur als CacheDaniel Fisher
 
Wartbare Oberflächentests mit Open-Source-Software
Wartbare Oberflächentests mit Open-Source-SoftwareWartbare Oberflächentests mit Open-Source-Software
Wartbare Oberflächentests mit Open-Source-SoftwareOliver Libutzki
 
VCAT EDULABS @ WP Camp 2013: Plugin-Entwicklung mit eigenen Tabellen, Backend...
VCAT EDULABS @ WP Camp 2013: Plugin-Entwicklung mit eigenen Tabellen, Backend...VCAT EDULABS @ WP Camp 2013: Plugin-Entwicklung mit eigenen Tabellen, Backend...
VCAT EDULABS @ WP Camp 2013: Plugin-Entwicklung mit eigenen Tabellen, Backend...VCAT Consulting GmbH
 
Systematische Konstruktion von API-Verträgen
Systematische Konstruktion von API-VerträgenSystematische Konstruktion von API-Verträgen
Systematische Konstruktion von API-VerträgenJan Christian Krause
 
Cloud Native und Java EE: Freund oder Feind?
Cloud Native und Java EE: Freund oder Feind?Cloud Native und Java EE: Freund oder Feind?
Cloud Native und Java EE: Freund oder Feind?Josef Adersberger
 
Cloud Native & Java EE: Freund oder Feind?
Cloud Native & Java EE: Freund oder Feind?Cloud Native & Java EE: Freund oder Feind?
Cloud Native & Java EE: Freund oder Feind?QAware GmbH
 
Die Kunst des Software Design - Java
Die Kunst des Software Design - JavaDie Kunst des Software Design - Java
Die Kunst des Software Design - JavaStephan Schmidt
 
MicroProfile 2.x: Der alternative Standard
MicroProfile 2.x: Der alternative StandardMicroProfile 2.x: Der alternative Standard
MicroProfile 2.x: Der alternative StandardOPEN KNOWLEDGE GmbH
 
GA-Konferenz-2011 Holger Tempel_Tracking Code
GA-Konferenz-2011 Holger Tempel_Tracking CodeGA-Konferenz-2011 Holger Tempel_Tracking Code
GA-Konferenz-2011 Holger Tempel_Tracking Codee-dialog GmbH
 
Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?
Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?
Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?Marc Müller
 
Enterprise UI
Enterprise UIEnterprise UI
Enterprise UIgedoplan
 
Slides__Splunk_UserGroup_20220407.pdf
Slides__Splunk_UserGroup_20220407.pdfSlides__Splunk_UserGroup_20220407.pdf
Slides__Splunk_UserGroup_20220407.pdfAlexanderStz1
 
JavaScript: Von einfachen Scripten zu komplexen Anwendungen
JavaScript: Von einfachen Scripten zu komplexen AnwendungenJavaScript: Von einfachen Scripten zu komplexen Anwendungen
JavaScript: Von einfachen Scripten zu komplexen Anwendungenmolily
 
Integration von Security-Checks in die CI-Pipeline
Integration von Security-Checks in die CI-PipelineIntegration von Security-Checks in die CI-Pipeline
Integration von Security-Checks in die CI-PipelineOPEN KNOWLEDGE GmbH
 
Wieviel client braucht das web
Wieviel client braucht das webWieviel client braucht das web
Wieviel client braucht das webgedoplan
 
Google Analytics Konferenz 2015: WORKSHOP: Enhanced ECommerce (Michaela Linha...
Google Analytics Konferenz 2015: WORKSHOP: Enhanced ECommerce (Michaela Linha...Google Analytics Konferenz 2015: WORKSHOP: Enhanced ECommerce (Michaela Linha...
Google Analytics Konferenz 2015: WORKSHOP: Enhanced ECommerce (Michaela Linha...e-dialog GmbH
 
Native Cross-Platform-Apps mit Titanium Mobile und Alloy
Native Cross-Platform-Apps mit Titanium Mobile und AlloyNative Cross-Platform-Apps mit Titanium Mobile und Alloy
Native Cross-Platform-Apps mit Titanium Mobile und AlloyMayflower GmbH
 

Similar a GWT: Eintauchen in MVP und Internationalisierung (20)

Anforderungsanalyse und UML Grundlagen
Anforderungsanalyse und UML GrundlagenAnforderungsanalyse und UML Grundlagen
Anforderungsanalyse und UML Grundlagen
 
Große Applikationen mit AngularJS
Große Applikationen mit AngularJSGroße Applikationen mit AngularJS
Große Applikationen mit AngularJS
 
2009 - DNC: Silverlight ohne UI - Nur als Cache
2009 - DNC: Silverlight ohne UI - Nur als Cache2009 - DNC: Silverlight ohne UI - Nur als Cache
2009 - DNC: Silverlight ohne UI - Nur als Cache
 
Wartbare Oberflächentests mit Open-Source-Software
Wartbare Oberflächentests mit Open-Source-SoftwareWartbare Oberflächentests mit Open-Source-Software
Wartbare Oberflächentests mit Open-Source-Software
 
VCAT EDULABS @ WP Camp 2013: Plugin-Entwicklung mit eigenen Tabellen, Backend...
VCAT EDULABS @ WP Camp 2013: Plugin-Entwicklung mit eigenen Tabellen, Backend...VCAT EDULABS @ WP Camp 2013: Plugin-Entwicklung mit eigenen Tabellen, Backend...
VCAT EDULABS @ WP Camp 2013: Plugin-Entwicklung mit eigenen Tabellen, Backend...
 
Systematische Konstruktion von API-Verträgen
Systematische Konstruktion von API-VerträgenSystematische Konstruktion von API-Verträgen
Systematische Konstruktion von API-Verträgen
 
Cloud Native und Java EE: Freund oder Feind?
Cloud Native und Java EE: Freund oder Feind?Cloud Native und Java EE: Freund oder Feind?
Cloud Native und Java EE: Freund oder Feind?
 
Cloud Native & Java EE: Freund oder Feind?
Cloud Native & Java EE: Freund oder Feind?Cloud Native & Java EE: Freund oder Feind?
Cloud Native & Java EE: Freund oder Feind?
 
Die Kunst des Software Design - Java
Die Kunst des Software Design - JavaDie Kunst des Software Design - Java
Die Kunst des Software Design - Java
 
Modernizing Oracle Forms - DOAG 2012
Modernizing Oracle Forms - DOAG 2012Modernizing Oracle Forms - DOAG 2012
Modernizing Oracle Forms - DOAG 2012
 
MicroProfile 2.x: Der alternative Standard
MicroProfile 2.x: Der alternative StandardMicroProfile 2.x: Der alternative Standard
MicroProfile 2.x: Der alternative Standard
 
GA-Konferenz-2011 Holger Tempel_Tracking Code
GA-Konferenz-2011 Holger Tempel_Tracking CodeGA-Konferenz-2011 Holger Tempel_Tracking Code
GA-Konferenz-2011 Holger Tempel_Tracking Code
 
Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?
Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?
Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?
 
Enterprise UI
Enterprise UIEnterprise UI
Enterprise UI
 
Slides__Splunk_UserGroup_20220407.pdf
Slides__Splunk_UserGroup_20220407.pdfSlides__Splunk_UserGroup_20220407.pdf
Slides__Splunk_UserGroup_20220407.pdf
 
JavaScript: Von einfachen Scripten zu komplexen Anwendungen
JavaScript: Von einfachen Scripten zu komplexen AnwendungenJavaScript: Von einfachen Scripten zu komplexen Anwendungen
JavaScript: Von einfachen Scripten zu komplexen Anwendungen
 
Integration von Security-Checks in die CI-Pipeline
Integration von Security-Checks in die CI-PipelineIntegration von Security-Checks in die CI-Pipeline
Integration von Security-Checks in die CI-Pipeline
 
Wieviel client braucht das web
Wieviel client braucht das webWieviel client braucht das web
Wieviel client braucht das web
 
Google Analytics Konferenz 2015: WORKSHOP: Enhanced ECommerce (Michaela Linha...
Google Analytics Konferenz 2015: WORKSHOP: Enhanced ECommerce (Michaela Linha...Google Analytics Konferenz 2015: WORKSHOP: Enhanced ECommerce (Michaela Linha...
Google Analytics Konferenz 2015: WORKSHOP: Enhanced ECommerce (Michaela Linha...
 
Native Cross-Platform-Apps mit Titanium Mobile und Alloy
Native Cross-Platform-Apps mit Titanium Mobile und AlloyNative Cross-Platform-Apps mit Titanium Mobile und Alloy
Native Cross-Platform-Apps mit Titanium Mobile und Alloy
 

GWT: Eintauchen in MVP und Internationalisierung