|
|
||||
| 1.0 其他語言 |
||||
3.3.3 分發器轉發 |
||||
|
當一個請求處理完成,需要呼叫另一個分發器來進一步處理,可以使用“轉發”。 比如,當我們增加了一個新的產品到購物車中,我們需要顯示購物車內容。
public class AddItemToCartDispatcher extends QueryDispatcher {
public boolean process(HttpServletRequest request, WebAppContext webContext, Controller controller)
throws Exception {
HttpSession session = request.getSession();
Cart cart = (Cart) session.getAttribute(Cart.KEY_IN_SESSION);
if (cart == null) {
cart = new Cart();
}
String productItemId = request.getParameter("item_id");
if (cart.containsItem(productItemId)) {
cart.incrementQuantityByItemId(productItemId);
return forward(ViewCartDispatcher.class, request, webContext, controller);
}
...
如果轉發的目標分發器需要讀取交談(Session)中資料,需要在轉發前準備好資料。 一般來說,“轉發” 僅用于沒有驗證的查詢請求。對于有驗證的請求,失敗的時候我們不需要使用轉發,成功的時候,我們也使用彈出成功窗口來,透過它來將主窗口轉到目標頁面。 在切換不同的 HTML 顯示頁面時,不需要使用“轉發”。可以呼叫 setHtmlTemplateFileName() 。
if (success) {
setHtmlTemplateFileName(controller.getDispatchSuccessTemplateFileName());
webContext.put(controller.getDispatchSuccessStaySecondsTag(), "2");
} else {
setHtmlTemplateFileName(controller.getDispatchFailTemplateFileName());
}
|
|||