Wie kann man server-push-asynchrone änderungen an einer HTML-Seite erstellt von JSF?
Wenn wir einen JSF-Seite ein client-request ermöglicht die Generierung von HTML dynamisch mit einer Kombination aus Java-code und HTML.
Können wir einführen Haken in die HTML-Seite mit JSF-Frameworks, die es erlauben-server zum aktualisieren der HTML-Seite basierend auf asynchrone Ereignisse, die später auf den server, in der Regel über verschiedene threads?
InformationsquelleAutor Rohit Banga | 2010-09-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
JSF 2.3+
Können Sie
@Push
und<f:websocket - >
. Unten ist ein kickoff Beispiel die updates, die eine Tabelle mit Daten, die auf einem application-scoped Ereignisses, das ausgelöst wird durch das backend.JSF 2.2-
Wenn Sie nicht auf den JSF 2.3 noch, Sie brauchen, um den Kopf, um 3rd-party JSF-Bibliotheken.
<o:Buchse>
(JSR356 WebSocket + CDI)<p:socket>
(Atmosphäre)Angemerkt werden sollte, dass die
<o:socket>
war die Grundlage für die JSF 2.3<f:websocket>
. Also, wenn Sie haben eine Menge von ähnlichkeiten haben, dann ist das richtig.PrimeFaces verwendet Atmosphäre unter den Motorhauben (das ist lästig, setup, ohne Maven). Atmosphäre unterstützt websockets mit fallback auf SSE und long polling. ICEfaces basiert auf alten long polling Technik. Alle diese nicht umsetzen, native JSR356 WebSocket-API, die wurde erst später eingeführt in Java EE 7.
OmniFaces verwendet native JSR356 WebSocket-API (unterstützt alle Java-EE-7-Server und Tomcat-7.0.27+). Es ist daher auch die meisten einfach zu installieren und zu verwenden (GLAS, Rahmen param, einem tag und einer annotation). Es erfordert nur CDI (nicht schwer zu Installation auf Tomcat), aber es ermöglicht Ihnen auch push von einem nicht-JSF-Artefakte auf (z.B. ein
@WebServlet
). Für Sicherheit und JSF view state zu halten Gründen, es unterstützt nur one-way push (server zu client), nicht Umgekehrt. Für die, die Sie halten können mit JSF-ajax-der übliche Weg. Die JSF 2.3<f:websocket>
basiert weitgehend auf OmniFaces<o:socket>
, daher finden Sie eine Menge von ähnlichkeiten in Ihren APIs (JSF - OmniFaces).Alternativ können Sie auch verwenden, polling, anstatt zu kämpfen. So ziemlich jeder ajax bewusst JSF-Komponenten-Bibliothek hat eine
<xxx:poll>
Komponente, wie PrimeFaces mit<p:poll>
. Dies ermöglicht Ihnen das senden alle X Sekunden eine ajax-Anfrage an den server und aktualisieren Sie die Inhalte, Wann immer notwendig. Es ist nur weniger effizient als push.Siehe auch:
Mit polling. Überprüfen Sie die Quelle und installieren Sie Firebug zu verfolgen XHR (Ajax) Anfragen.
InformationsquelleAutor BalusC
Einfachsten für Sie werden kann Einführung der ajax4jsf-Bibliothek "poll" - Komponente:
https://ajax4jsf.dev.java.net/nonav/documentation/ajax-documentation/entire.html#d0e1955
Wird es nicht brauchen-Anwendung Rekonfiguration und große änderungen in der JSF-Seite (nur hinzufügen von a4j:poll-Komponente)
Es funktionierte sehr gut in einige meiner Projekte.
InformationsquelleAutor Andriy Sholokh
Wenn Sie brauchen, voll ausgestattete Comet-updates (reverse Ajax) und so weiter, dann lohnt sich ein Blick auf die DWR Bibliothek.
InformationsquelleAutor Scott Wilson
Können Sie einen Blick auf Naht (siehe dieser Artikel für eine Diskussion zu verwenden, Naht mit JSF und AJAX).
Wenn ich verwendet, Naht die Letzte Zeit war es ziemlich langsam ist, obwohl. Möchten Sie möglicherweise erstellen Sie Ihre eigenen JSF-Komponente, die erzeugt JavaScript (zum Beispiel mit Hilfe von jQuery, wie in dieser Artikel).
InformationsquelleAutor Aaron Digulla