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());
}