4. JavaServer Faces
• „Bodenständige Technologie“
• Formularbasierte Anwendungen
• Data Lifecycle
– z.B. Konvertierung + Validierung
• Mächtige Komponenten
• Support für AJAX, HTML5, etc.
5. Aber...
• Server als zentrale Instanz
– Rendering, Validierung, etc.
– Viel Kommunikation mit dem Server
• PPR reicht oft nicht aus
• State, State, State, ...
– Muss synchron gehalten werden
– Ohne langlebige Scopes geht nichts
19. Kann man JSF und GWT
kombinieren?
Ja, das geht! ☺
20. JSF & GWT
• Das Ziel:
– Clientseitige Funktionalität
– Mehr Interaktivität
– User Experience
• Die Herausforderung:
– Interaktion mit JSF Komponenten
– JSF Lifecycle nicht beeinflussen
26. Probleme
• Kostenberechnung im Backend!
• JavaScript Komponente sinnvoll!
– Interaktivität (Tooltips, etc.)
• Berechnung auf dem Server?
– RTT problematisch!
• Neuimplementierung der
Berechnungslogik in JavaScript?
27. Lösungsansatz
• Implementierung mittels GWT
– Eingaben aus JSF Komponenten auf dem
Client auslesen
– Berechnungslogik als Shared Code
– Nutzung von JavaScript Chart Library für
die Grafik (d3.js)
29. Was brauchen wir?
• Interaktion mit JSF Komponenten
➡ GWT Components
• Integration der JavaScript Library
➡ JSNI
• Kommunikation mit Server
➡ Remoting
37. Eigene Komponenten
public class Html5TextBox extends TextBox {
public void setPlaceholder(String value) {
getElement().setPropertyString("placeholder", value);
}
public String getPlaceholder() {
return getElement().getPropertyString("placeholder");
}
}
38. Für uns interessant...
<input id="foobar" type="text" />
Element element =
Document.get().getElementById("foobar");
TextBox textBox = TextBox.wrap(element);
textBox.addChangeHandler(new ChangeHandler() {
@Override
public void onChange(ChangeEvent event) {
// ...
}
});
39. Was heißt das?
• Zugriff auf DOM Element der JSF
Komponenten ist einfach möglich
• Erlaubt uns...
– ... aktuelle Werte zu lesen
– ... den Zustand zu verändern
– ... Listener zu registrieren
44. Overlay Types
public native <????????> getKonferenz() /*-{
var konferenz = {
name : 'JAX',
jahr : 2014
};
return konferenz;
}-*/;
45. Overlay Types
public class Konferenz extends JavaScriptObject {
protected Konferenz() {}
public final native String getName() /*-{
return this.name;
}-*/;
public final native int getJahr() /*-{
return this.jahr;
}-*/;
}
58. Was heißt das?
• Kommunikation mit dem Server auf
verschiedene Arten möglich
• Wir verwenden RestyGWT:
– Nutzung von JAX-RS
– Modellobjekte als Shared Code
• Funktioniert auch mit JPA Entitäten!
– Stark typisierte Client API
60. Fazit
• JSF & GWT lassen sich kombinieren
• Keine „Lösung für Alles“
• Kann sinnvoll sein, wenn...
– geteilter Code benötigt wird
– bestehende JSF Anwendungen mehr
„Interaktivität“ benötigen
– Typensicherheit gewünscht wird
61.
62. Vielen Dank für die
Aufmerksamkeit!
https://github.com/chkal/jax14-jsf-gwt
Christian Kaltepoth
kaltepoth@ingenit.com
@chkal