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