Comment peut-server push asynchrone des modifications à une page HTML créée par JSF?
Lorsque nous créons une page JSF, une demande d'un client permet la génération de HTML de façon dynamique à l'aide d'une combinaison de code Java et HTML.
Peut-on introduire les crochets dans la page HTML à l'aide de l'infrastructure JSF, qui permettent au serveur de mise à jour de la page HTML en fonction asynchrone, les événements se produisant au plus tard au serveur, généralement par l'intermédiaire de différents threads?
OriginalL'auteur Rohit Banga | 2010-09-24
Vous devez vous connecter pour publier un commentaire.
JSF 2.3+
Vous pouvez utiliser
@Push
et<f:websocket>
pour cela. Ci-dessous est un kickoff exemple qui met à jour une table de données à une application étendue de l'événement déclenché par le backend.JSF 2.2-
Si vous n'êtes pas sur JSF 2.3 encore, vous avez besoin à la tête de la 3e partie de l'ACI bibliothèques.
<o:socket>
(JSR356 WebSocket + CDI)<p:socket>
(Atmosphère)A noté que le
<o:socket>
était à la base pour le JSF 2.3<f:websocket>
. Donc, si vous avez trouvé beaucoup de similitudes, puis c'est correct.PrimeFaces utilise L'atmosphère sous le capot (qui est gênant pour le programme d'installation sans Maven). L'ambiance prend en charge les websockets avec reprise à l'ESS et le long du scrutin. ICEfaces est basée sur d'anciennes le temps d'interrogation technique. Tous ceux qui ne mettent pas en œuvre indigène JSR356 API WebSocket qui fut par la suite introduit dans Java EE 7.
OmniFaces utilise natif JSR356 API WebSocket (pris en charge dans tous les Java EE 7 serveurs et Tomcat 7.0.27+). Par conséquent, il est également plus simple à installer et à utiliser (un BOCAL, un contexte param, un tag et une annotation). Il ne nécessite CDI (pas dur à installer sur Tomcat), mais il vous permet même de les pousser à partir d'un non-JSF artefact (par exemple, un
@WebServlet
). Pour la sécurité et la vue JSF état gardant raisons, il prend en charge uniquement un moyen de pousser (du serveur vers le client), et pas l'inverse. Pour cela, vous pouvez continuer à utiliser JSF, ajax de la manière habituelle. La JSF 2.3<f:websocket>
est en grande partie basée sur OmniFaces<o:socket>
, où vous trouverez un grand nombre de similitudes dans leurs Api (JSF - OmniFaces).Alternativement, vous pouvez également utiliser d'interrogation à la place de pousser. Presque tous ajax conscient JSF composant la bibliothèque dispose d'un
<xxx:poll>
composants, tels que les PrimeFaces avec<p:sondage>
. Cela vous permet d'envoyer toutes les X secondes une requête ajax vers le serveur et mettre à jour le contenu chaque fois que nécessaire. C'est seulement moins efficace que la pousser.Voir aussi:
À l'aide de vote. De vérifier la source et installer Firebug pour suivre XHR (Ajax) des demandes.
OriginalL'auteur BalusC
Plus simple pour vous peut être la mise en place de ajax4jsf de la bibliothèque du "sondage" composant:
https://ajax4jsf.dev.java.net/nonav/documentation/ajax-documentation/entire.html#d0e1955
Il n'aura pas besoin de demande de reconfiguration et de gros changements dans JSF page (uniquement ajout a4j:un sondage composant)
Il a travaillé très bon dans le couple de mes projets.
OriginalL'auteur Andriy Sholokh
Si vous avez besoin d'complet de la Comète mises à jour (reverse Ajax) et ainsi de suite, alors sa vaut la peine de prendre un coup d'oeil à la DWR bibliothèque.
OriginalL'auteur Scott Wilson
Vous pouvez avoir un coup d'oeil à Couture (voir cet article pour une discussion de l'utilisation de la Couture avec JSF et AJAX).
Lorsque j'ai utilisé Couture la dernière fois, c'était assez lent, bien que. Vous pouvez créer votre propre JSF composant qui génère du JavaScript (par exemple à l'aide de jQuery, comme expliqué dans cet article).
OriginalL'auteur Aaron Digulla