Question

J'implémente dans mon application Web une fonctionnalité permettant à un client de générer le rapport en saisissant des données et en cliquant sur le bouton d'envoi.

Le problème est que la génération de rapports prend beaucoup de temps et que le rapport risque de ne pas être généré si les données saisies par l'utilisateur sont erronées.

La tâche de génération de rapport complète comporte de nombreuses sous-tâches et je souhaite que lorsque le client appuie sur soumettre, puis juste en dessous de cette page, je souhaite afficher l'état / la progression des tâches de génération de rapport réparties dans diverses sous-tâches telles que

.
- Validating input data ------ Done
- Fetching the data     ------ In Progress
 and so on,

Comment puis-je réaliser cela en utilisant Struts2, jQuery dans la couche Web?

Toute aide sera grandement appréciée.

Merci

Était-ce utile?

La solution

Nous avons eu un problème similaire. La transaction prend normalement 20 secondes, parfois plus d’une minute. Nous pensions qu'il y aurait des solutions plus faciles, mais nous nous sommes retrouvés avec un système comme celui-ci,

  1. Lorsque la demande d'exécution longue est reçue, une session est créée et un nouveau thread est créé pour gérer la demande.
  2. Une page est immédiatement renvoyée avec le texte à afficher "Collecting data ...". La page contient une minuterie pour se rafraîchir toutes les secondes. L'URL de rechargement contient l'ID de session (nous n'utilisons pas HttpSession) dans le paramètre de requête.
  3. Lorsque le gestionnaire d'actions voit la demande avec un ID de session, il sait que la session est démarrée, vérifiez qu'une variable d'état est mise à jour par le thread de travail. Si ce n'est pas fait, la page est mise à jour avec le nouveau statut "Récupération de données à partir de DB1 ...". Il y a un scintillement lorsque cela est fait comme rechargement. Si vous le souhaitez, vous pouvez utiliser AJAX pour mettre à jour le statut.
  4. Lorsque le fil de travail est terminé et que la page est prête à être diffusée, l'appel renvoie simplement le résultat.

Nous avons rencontré un problème avec l'équilibreur de charge. Pour que le schéma fonctionne, chaque rechargement doit revenir sur le même serveur. Heureusement, l’équilibreur de charge prend en charge le routage persistant basé sur notre identifiant de session.

Autres conseils

Jetez un coup d’œil à l’intercepteur Struts2 ExecuteAndWait. http://struts.apache.org/2. x / docs / execute-and-wait-interceptor.html

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top