2012-03-14 10 views

risposta

4

può sicuramente essere fatto. Si vuole guardare Asynchronous programming with HTTP nella documentazione, spiega come farlo in modo non bloccante. Avrai bisogno di un po 'di javascript per la parte di reindirizzamento però.

E non so cosa intendi con "comando di sistema" ma probabilmente lo vuoi per create a job, quindi puoi attivarlo con una richiesta. È quindi possibile poll it fino al termine e quindi reindirizzare l'utente. Ma in realtà la documentazione fa un lavoro infinitamente migliore nello spiegare ciò che sto facendo ora.

Ecco un esempio di un'azione controller in cui presumo che il comando di sistema restituisca un tipo di output String all'utente. Quando il lavoro è completato, verrà inviata una risposta all'utente, attivando così il gestore di successo nell'esempio javascript.

public static void executeSystemCommand(String input) { 
    Promise<String> outputPromise = new SystemCommandJob(input).now(); 
    String output = await(outputPromise); 
    renderText(output); 
} 

In sostanza, se si sta utilizzando jQuery $.ajax è possibile utilizzare il completa evento per il polling dei dati (basta fare la richiesta di nuovo se non è riuscito nel tempo di timeout) e utilizzare il successo /fatto evento per reindirizzare l'utente quando l'applicazione risponde per indicare che il "comando di sistema" è stato eseguito in esecuzione.

Esempio di una funzione è possibile utilizzare:

function poll(){ 
    $.ajax({ 
     url: "/systemcommand", 
     success: function(data){ 
      // redirect to next page here 
      document.location.href = '/output' 
     }, 
     complete: poll, 
     timeout: 20000 
    }); 
}; 

C'è anche a great example on long polling in javascript StackOverflow.

Problemi correlati