Primefaces remotecommand – exécuter un traitement long tout en préservant les performances

Nous avons tous été confrontés à une expérience utilisateur désastreuse due à un problème de performance sur une page qui met en jeu des traitements complexes.

Une solution consiste à afficher immédiatement une partie des informations et à compléter les informations manquantes de la page quelques secondes plus tard lorsque toutes les données ont été collectées.

Pour résoudre cette difficulté vous pouvez utiliser le composant remoteCommand qui permet d’invoquer une méthode d’un bean.

<p:remoteCommand id="myRemoteCommand" name="myRemoteCommand" async="false" actionListener="#{bean.heavyWork}"
 update="widget" process="@this" autoRun="true"/>

Dans cet exemple la méthode bean.heavyWork() est invoquée immédiatement après le chargement de la page (autoRun= »true »). A la fin de l’exécution de la méthode l’élément « widget » de la page est mis à jour.

La zone de la page qui est mise à jour ne doit pas inclure le composant remoteCommand et le composant doit être intégré dans un formulaire.

Si vous déclenchez le composant remoteCommand à partir d’une fonction javascript vous pouvez également passer des paramètres à la commande.

$(document).ready(function() { 
 myRemoteCommand( [ { name: 'latitude', value: latitude }, { name: 'longitude', value: longitude } ] );
});

Dans ce cas on peut récupérer les paramètres dans la méthode bean.heavyWork en utilisant la méthode

FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap()

Dans cet exemple nous avons utilisé l’attribut async= »false » mais on pourrait parfaitement rendre le traitement asynchrone (avec async= »true ») et utiliser la commande « poll » pour rafraîchir la page avec les données issues du traitement.

http://www.jperf.com

 

 

 

Publicités

A propos jlerbsc

founder of JavaPerf Consulting Http://www.jperf.com
Cet article, publié dans Primefaces, est tagué , . Ajoutez ce permalien à vos favoris.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s