This page (revision-8) was last changed on 04-Sep-2019 06:58 by Dieter Käppel

This page was created on 14-Sep-2016 14:10 by Dieter Käppel

Only authorized users are allowed to rename pages.

Only authorized users are allowed to delete pages.

Page revision history

Version Date Modified Size Author Changes ... Change note
8 04-Sep-2019 06:58 9 KB Dieter Käppel to previous
7 04-Sep-2019 06:58 8 KB Dieter Käppel to previous | to last
6 15-Sep-2016 19:47 8 KB Dieter Käppel to previous | to last
5 14-Sep-2016 14:39 8 KB Dieter Käppel to previous | to last
4 14-Sep-2016 14:37 7 KB Dieter Käppel to previous | to last
3 14-Sep-2016 14:30 6 KB Dieter Käppel to previous | to last
2 14-Sep-2016 14:25 5 KB Dieter Käppel to previous | to last
1 14-Sep-2016 14:10 2 KB Dieter Käppel to last

Page References

Incoming links Outgoing links

Version management

Difference between version and

At line 15 added 2 lines
Zusätzlich sind einige Hilfskomponenten und APIs vorhanden, die das Implementieren von Komponenten und deutlich erleichtern.
At line 24 removed 3 lines
!!!API
Die abstrakte Klasse JQueryComponent baut direkt auf die [JSF]-Klasse UIComponentBase auf und stellt die Grundlage zum Implementieren von JQuery- und anderer [Javascript]-Komponenten dar.
At line 30 changed one line
<j:ajax listener="#{jqueryController.indexAction(index)}" onsuccess="console.log(response);"/>
<j:ajax id="ajax-#{index}" listener="#{jqueryController.indexAction(index)}"/>
At line 35 added 46 lines
!!!API
Die abstrakte Klasse JQueryComponent baut direkt auf die [JSF]-Klasse UIComponentBase auf und stellt die Grundlage zum Implementieren von JQuery- und anderer [Javascript]-Komponenten dar.
!!JQuery Request Processing
Insbesondere enthält die JQueryComponent eine Methode processRequest, welche überschrieben werden kann, um den Einspruch für einen AJAX-Request zu erhalten, der vom Javascript-Anteil der Komponente ausgegangen ist:
{{{
@Override
public Object processRequest(Map<String, String> parameters) {
return getListener().invoke(getFacesContext().getELContext(), new Object[] {});
}
}}}
Das Implementieren dieser Methode ist denkbar einfach. Der Aufruf wird einfach entgegen genommen, zusätzlich wird die Request-Parameter-Map übergeben, da diese hier häufig benötigt wird. Zurückgegeben wird ein Java-POJO, welches vom Framework JSON-Serialisiert wird und an den AJAX-Aufrufer aus dem Javascript zurückgesendet wird. Damit ist Hin- und Rückweg vollständig in einer Methode implementierbar.
!!JQuery Request Sending
Grundsätzlich können beliebige Arten von HTTP-Requests an das Framework gesendet werden. Aus Gründen der Bequemlichkeit wird aber ein Javascript jsf-jquery.js mitgeliefert. Dies enthält die function action(baseUrl, viewId, source, options) und stellt die einfachste Art dar, den Request an die betreffende Komponente zu addressieren, sowie entsprechend Parameter oder Nutzdaten zu übertragen.
Die Parameter im folgenden erklärt:
||Name||Bedeutung||Standard-Quelle
|baseUrl|Der Servlet-Path bis zum aktuellen Faces-Servlet|JQueryHelper.getBaseUrl()
|viewId|Die aktuelle View-Id der XHTML-Page auf der sich die Komponente befindet|FacesContext.getCurrentInstance().getViewRoot().getViewId()
|source|Die Komponente, die den AJAX-Request ausführt|getClientId()
|options|Zusätzliche Optionen|getOptions()
Ein Beispiel aus dem generierten Javascript-Code:
{{{
ext.jquery.action('/spring-boot-test/faces', '/page/jquery.xhtml', 'form:rest-index-buttons:ajax-2', {});
}}}
Üblicherweise wird der Javascript-Code für den Action-Aufruf aus dem Encoding der JQuery-Komponente geschrieben:
{{{
@Override
public void encodeEnd(FacesContext context) throws IOException {
ResponseWriter writer = context.getResponseWriter();
writer.startElement("script", this);
writer.writeAttribute("type", "text/javascript", null);
writer.writeText("ext.jquery.action('" + JQueryHelper.getBaseUrl() + "', '" +
context.getViewRoot().getViewId() + "', '" + getClientId() + "', " + getOptions());", this, null);
writer.endElement("script");
}
}}}