Domanda

Sto implementando una funzionalità nella mia app Web in modo tale che un client possa generare il rapporto inserendo alcuni dati e facendo clic sul pulsante di invio.

Il problema è che la generazione del report richiede molto tempo e il report potrebbe non generarsi se l'utente ha inserito i dati errati.

L'attività completa di generazione di report ha molte attività secondarie e desidero quando il cliente preme invia quindi appena sotto quella pagina voglio mostrare lo stato / lo stato delle attività di generazione dei report suddivise in varie attività secondarie come

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

Come posso ottenere questo risultato usando Struts2, jQuery nel livello web?

Qualsiasi aiuto sarà molto apprezzato.

Grazie

È stato utile?

Soluzione

Abbiamo avuto un problema simile. La transazione richiede normalmente 20 secondi, a volte più di un minuto. Abbiamo pensato che ci sarebbero state soluzioni più semplici, ma abbiamo finito con uno schema come questo,

  1. Quando viene ricevuta la richiesta di esecuzione prolungata, viene creata una sessione e viene generato un nuovo thread per gestire la richiesta.
  2. Una pagina viene immediatamente restituita con testo per visualizzare " Raccolta dati ... " ;. La pagina contiene un timer per aggiornarsi ogni secondo. L'URL di ricarica contiene l'ID sessione (non usiamo HttpSession) nel parametro query.
  3. Quando il gestore azioni vede la richiesta con un ID sessione, sa che la sessione è avviata, controlla una variabile di stato che viene aggiornata dal thread di lavoro. In caso contrario, aggiorna la pagina con il nuovo stato " Recupero dati da DB1 ... " ;. Sfarfallio quando questo viene fatto come ricaricare. Se ti interessa, puoi utilizzare AJAX per aggiornare lo stato.
  4. Al termine del thread di lavoro e la pagina è pronta per la consegna, la chiamata restituisce semplicemente il risultato.

Si è verificato un problema con il bilanciamento del carico. Perché lo schema funzioni, ogni ricarica deve tornare allo stesso server. Fortunatamente, il bilanciamento del carico supporta il routing appiccicoso basato sul nostro ID di sessione.

Altri suggerimenti

Dai un'occhiata all'intercettore Struts2 ExecuteAndWait. http://struts.apache.org/2. x / docs / execute-and-wait-interceptor.html

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top