Пример перехватчика Struts 2 execAndWait
Struts 2 поставляется с очень интересным перехватчиком «Execute and Wait» под названием «execAndWait», это очень удобный перехватчик для длительных действий в фоновом режиме, показывая пользователю настраиваемую страницу ожидания. В этом руководстве показан полный пример использования перехватчика Struts 2execAndWait.
1. действие
Обычный класс действий с длительным процессом демонстрации эффектаexecAndWait.
LongProcessAction.java
package com.example.common.action; import com.opensymphony.xwork2.ActionSupport; public class LongProcessAction extends ActionSupport{ public String execute() throws Exception { //it should be delay few seconds, //unless you have a super powerful computer. for(int i =0; i<1000000; i++){ System.out.println(i); } return SUCCESS; } }
2. Страницы JSP
Создайте две страницы:
-
wait.jsp - показать пользователю во время процесса длительный процесс.
-
success.jsp - показать пользователю после завершения процесса.
HTML meta refresh
Не забудьте поместить мета-обновление поверх ожидающей страницы; В противном случае страница не будет перенаправлена на страницу успеха, даже если процесс завершится.
В этомwait.jsp метаобновление устанавливает перезагрузку страницы каждые 5 секунд. Если процесс завершен, он будет перенаправлен наsuccess.jsp, иначе останется на той же странице.
wait.jsp
<%@ taglib prefix="s" uri="/struts-tags" %> "/>Struts 2 execAndWait example
Please wait while we process your request...
success.jsp
<%@ taglib prefix="s" uri="/struts-tags" %>Struts 2 execAndWait example
Done
3. Выполнить и ждать перехватчик
Свяжите класс действия и объявите перехватчик "execAndWait".
Параметры execAndWait
-
delay (optional): Начальная задержка в миллисекундах для отображения файла wait.jsp. По умолчанию нет задержки.
-
delaySleepInterval (optional): интервал в миллисекундах для проверки того, что фоновый процесс уже выполнен. По умолчанию это 100 миллисекунд.
struts.xml
1000 500 pages/wait.jsp pages/success.jsp
В этом случае он будет задерживать 1 секунду, чтобы отобразитьwait.jsp, и каждые 500 миллисекунд проверять, выполняется ли уже фоновый процесс. Даже если процесс завершен, все равно нужно дождаться метаобновленияwait.jsp, чтобы запустить перезагрузку страницы.
4. Demo
Задержите 1 секунду и покажитеwait.jsp.
Когда процесс будет завершен, автоматически отобразитеsuccess.jsp.