2012-03-14 2 views
6

Я хотел бы реализовать страницу, которая будет отображаться пользователю во время выполнения системной команды. Как только команда завершится, пользователь должен быть перенаправлен на другую страницу.Как написать страницу загрузки с фреймворком воспроизведения

Каковы некоторые стратегии для реализации этого?

(Решение без JavaScript было бы идеально)

ответ

4

Это, безусловно, может быть сделано. Вы хотите посмотреть Asynchronous programming with HTTP в документации, в нем объясняется, как это сделать неблокируемым способом. Тем не менее, вам понадобится немного javascript для перенаправляющей части.

И я не знаю, что вы имеете в виду под «системной командой», но вы, вероятно, захотите сделать это create a job, чтобы вы могли вызвать его с запросом. Вы можете затем poll it, пока он не будет закончен, а затем перенаправляет пользователя. Но на самом деле документация делает бесконечно лучшую работу, объясняя это, и теперь я это делаю.

Вот пример действия контроллера, где я предполагаю, что ваша системная команда возвращает какой-то вывод строки для пользователя. Когда задание будет завершено, он отправит ответ пользователю, тем самым инициируя обработчик успеха в примере javascript.

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

В принципе, если вы используете JQuery-х $.ajax вы можете использовать полное событие для опроса данных (просто сделать запрос снова, если это так и не удалось в течение времени тайм-аута) и использовать успех/done event, чтобы перенаправить пользователя, когда приложение отвечает, чтобы указать, что «системная команда» выполнена.

Пример функции вы можете использовать:

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

Существует также a great example on long polling в JavaScript на StackOverflow.

Смежные вопросы