JSF Activate JS integriert Activate JS in den JSF Lifecycle.
Aus anderer Sicht befindet sich unterhalb eines Activate-Tag immer eine Activate-JS-HTML-Struktur ohne JSF-Tags. Die Kommunikation zwischen JSF und Activate JS erfolgt über den Activate-Tag:
<j:activate id="data" value="#{testController.value}" variable="myData" handler="#{testController.handler}">
<div control="{interpolate: true}">{this.myData}</div>
</j:activate>
Hinweis: Diese Komponente generiert einen DIV-Tag mit einem Ajax-Control-Attribut. Grundsätzlich kann das Ajax-Control eigenständig zu Rest-Services kommunizieren. Der Vorteil hierin besteht in der Anbindung von EL-Expressions an eine bestehende Java-Infrastruktur.
Hinweis: Der AJAX-Aufruf erfolgt asynchron. Die untergeordnete Aktivierungs-Chain wird nach Success/Fail weiter ausgeführt, während die Aktivierungs-Chain auf gleicher Ebene unmittelbar weiter ausgeführt wird.
public class Handler implements EventHandler {
private static final long serialVersionUID = 1L;
public void change(Node node) {
System.out.println("changed");
}
public String test(Node node) {
return "Hello World!";
}
}
Die Events werden durch das Event-System von JQuery angesteuerg:
<button onclick="$(this).trigger('test'); return false;">Test</button>
Damit ist es relativ einfach, einen Server-Event auszulösen. Um damit auch Daten übertragen zu können, ist man besser beraten, ein Control zu implementieren:
<button control="{test: 'some-param'}">Test</button>
Natürlich ist noch ein entsprechendes Control zu implementieren:
$.controls.extend({
test: function(next) {
var context = this;
var value = this.control.get();
this.element.attr("onclick", "return false;");
this.element.on("click", function() {
context.element.trigger("test", {data: value, callback: function(response) {
context.element.text(response);
}});
});
next();
}
});
Das Control hört auf den Namen "test". Die Implementierung besteht zunächst aus einem Click-Handler, der Default-Form-Submit wird durch "return false;" abgeschaltet. Bei einem auftretenden Klick wird nun der Event "test" am aktuellen Element (context.element) ausgelöst.
Zusätzlich werden die Parameter data und callback mitgegeben. Die Daten werden an die Java-Methode als parameter übergeben, die Callback-Funktion wird aufgerufen, nachdem die Antwort des Server-Requests beendet ist. Diese Funktion enthält dann das Response-Objekt mit dem Return-Wert der Java-Methode.