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