execAndWait Interceptor trong Struts 2



execAndWait Interceptor, là viết tắt của execute and wait interceptor, được sử dụng để hiển thị kết quả result trung gian. Interceptor này được đề nghị để sử dụng cho action mà chạy trong thời gian dài. Theo mặc định, nó không được tìm thấy trong default stack. Vì thế bạn cần xác định nó một cách tường minh. Nếu bạn không xác định "wait"result, thì Struts Framework hiển thị một result trung gian tới khi request của bạn hoàn thành.

Với các result trung gian tùy biến, bạn cần định nghĩa "wait"result trong struts.xml file. Trong page này, bạn có thể hiển thị hình ảnh tiến trình xử lý, … Do đó, việc xác định custom result là khá tiện lợi.

Các tham số của execAndWait Interceptor trong Struts 2

Có 3 tham số được định nghĩa cho execAndWait Interceptor:

1. delay: xác định thời gian delay ban đầu. Theo mặc định thì không có thời gian delay ban đầu nào được thiết lập.

2. delaySleepInterval: chỉ được sử dụng với delay. Nó xác định khoảng thời gian (mili giây) để kiểm tra rằng tiến trình xử lý ở background là đã hoàn thành. Theo mặc định, nó được thiết lập là 100 mili giây.

3. threadPriority: xác định quyền ưu tiên của Thread. Theo mặc định là Thread.NORM_PRIORITY.

Ví dụ execAndWait Interceptor mà không có wait result

Trong trường hợp này, Struts Framework cung cấp một result trung gian.

<action name="login" class="com.vietjack.Login">
    <interceptor-ref name="params"/>
    <interceptor-ref name="execAndWait"/>
    <result name="success">login-success.jsp</result>
</action>

Ví dụ execAndWait Interceptor có wait result

Trong trường hợp này, page trung gian của bạn sẽ được triệu hồi.

<action name="login" class="com.vietjack.Login">
    <interceptor-ref name="params"/>
    <interceptor-ref name="execAndWait"/>
    <result name="success">login-success.jsp</result>
    <result name="wait">myintermediatepage.jsp</result>
</action>

Giả sử code của page trung gian như dưới đây. Thẻ s:url sẽ chuyển tiếp request tới url đã cho.

myintermediatepage.jsp

<%@ taglib uri="/struts-tags" prefix="s" %>
<html>
<head>
<title>wait</title>

<meta http-equiv="refresh" content="0.5;url='<s:url includeParams="all" />'">
</head>
<body>

<p>Yeu cau cua ban dang duoc xu ly...</p>
<img src="processing.gif"/>

</body>
</html>

Nó sẽ được refresh mỗi 0.5 s.