Struts2 + jQuery - отправка регулярных обновлений клиенту - PullRequest
0 голосов
/ 13 сентября 2009

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

Проблема в том, что создание отчета занимает много времени, и отчет может не сгенерироваться, если введенные пользователем данные неверны.

Задача создания полного отчета имеет много подзадач, и я хочу, чтобы, когда клиент нажимает кнопку «Отправить», чуть ниже той страницы, я хотел бы показать состояние / ход выполнения задач создания отчета, разбитых на различные подзадачи, такие как

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

Как мне добиться этого, используя Struts2, jQuery в веб-слое?

Любая помощь будет принята с благодарностью.

Спасибо

Ответы [ 2 ]

1 голос
/ 01 октября 2009

Посмотрите на перехватчик Struts2 ExecuteAndWait. http://struts.apache.org/2.x/docs/execute-and-wait-interceptor.html

1 голос
/ 13 сентября 2009

У нас была похожая проблема. Транзакция обычно занимает 20 секунд, иногда более минуты. Мы думали, что будут более простые решения, но в итоге мы получили такую ​​схему,

  1. Когда получен длительный запрос, создается сеанс и создается новый поток для обработки запроса.
  2. Страница немедленно возвращается с текстом для отображения «Сбор данных ...». Страница содержит таймер для обновления каждую секунду. URL перезагрузки содержит идентификатор сеанса (мы не используем HttpSession) в параметре запроса.
  3. Когда обработчик действия видит запрос с идентификатором сеанса, он знает, что сеанс запущен, проверьте переменную состояния, обновляемую рабочим потоком. Если это не сделано, обновляется страница с новым статусом «Извлечение данных из DB1 ...». Мигает, когда это делается как перезагрузка. Если вам не все равно, вы можете использовать AJAX для обновления статуса.
  4. Когда рабочий поток завершен и страница готова к доставке, вызов просто возвращает результат.

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

...