Может ли контроллер Grails динамически возвращать обновление представления до завершения действия? - PullRequest
3 голосов
/ 09 марта 2012

Текущая ситуация

Я выполняю внешнее приложение (используя Runtime.getRuntime().exec ... пример здесь ) и слушаю поток, в который приложение записывает стандартный вывод.Эта часть работает как положено, и я получаю результаты (в контроллере grails), строка за строкой , так как они доступны, и - когда у потока больше нет содержимого - я отображаю результат на странице.

Другой аспект - это инициализация этого приложения со страницы gsp, асинхронно.Это также уже рассмотрено, и сделан вызов remoteFunction (в вышеупомянутый метод контроллера), результаты собираются и возвращаются, и они правильно отображаются в обозначенной области на странице.


Но чтоменя это беспокоит, и я на самом деле хочу добиться:

Цель

, чтобы отобразить строки, прочитанные из потока , как они читаются , а не после завершения всего потока(как это делается сейчас).

Это означает (что-то вроде, например) вызова render для каждой строки в цикле чтения потока:

while ((line = bri.readLine()) != null) {
  System.out.println(line);
  //render line here?
}

Может ли это быть достигнуто?

Пожалуйста, объясните:)

1 Ответ

2 голосов
/ 11 марта 2012

Я думаю, что нет стандартного способа Grails для достижения желаемого поведения.

g: remoteFunction по-прежнему является тегом, который оборачивает для вас запрос AJAX. Запрос привязан к шаблону ответа на запрос - вы не можете получить несколько ответов для одного запроса. Ваш код действия не будет изменен автоматически.

Вы должны реализовать это самостоятельно.

Я бы попробовал следующее:

  • Разделите ваш единственный вызов remoteFunction на несколько запросов AJAX .
  • Первый запрос инициализирует новый поток , который прослушивает ваше внешнее приложение.
  • Результаты этого приложения должны быть сохранены в области сеанса , чтобы ...
  • следующие периодические запросы от клиента могут опрашивать текущее состояние выполнения.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...