WebWork2にはActionの非同期実行というか、要するに実行中画面を表示する機能があります。
ExecAndWaitAction
10秒のスリープを10回繰り返し、progress(進捗率)を10づつ上げていくだけのActionです。
public class ExecAndWaitAction extends ActionSupport { private int progress; public String execute() throws Exception { for (int i = 0; i < 10; i++) { progress = i * 10; Thread.sleep(10000); } progress = 100; return SUCCESS; } public int getProgress() { return progress; } }
xwork.xml
interceptorにexecAndWaitを設定し、resultのsuccessに完了画面(wait_done.vm)、waitに実行中画面(wait.vm)を設定。
<action class="ww2.examples.event.ExecAndWaitAction" name="wait"> <interceptor-ref name="execAndWait" /> <result type="dispatcher" name="success">/WEB-INF/vm/wait_done.vm</result> <result type="dispatcher" name="wait">/WEB-INF/vm/wait.vm</result> </action>
wait.vm
メッセージと進捗率を表示。5秒経つとリロードします。
<html> <head> <META HTTP-EQUIV="Refresh" CONTENT="5" /> <title>処理中画面</title> </head> <body> しばらくお待ちください。($progress%完了) </body> </html>