从1.2.2开始对DispatchAction中实现isCancelled的功能进行了简化. 在DispatchAction的子类中只需override DispatchAction的cancelled 方法即可,而不用在1.1中要通过override execute方法来实现. 至于实现的原理可参见下面的Struts1.1.2中DispatchAction源代码.
/** * Process the specified HTTP request, and create the corresponding HTTP * response (or forward to another web component that will create it). * Return an <code>ActionForward</code> instance describing where and how * control should be forwarded, or <code>null</code> if the response has * already been completed. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @exception Exception if an exception occurs */ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { //请注意下面1.2.2新增的代码 if (isCancelled(request)) { ActionForward af = cancelled(mapping, form, request, response); if (af != null) { return af; } } // Identify the request parameter containing the method name String parameter = mapping.getParameter(); if (parameter == null) { String message = messages.getMessage("dispatch.handler", mapping.getPath());
log.error(message);
throw new ServletException(message); }
// Get the method's name. This could be overridden in subclasses. String name = getMethodName(mapping, form, request, response, parameter);
// Prevent recursive calls if ("execute".equals(name) || "perform".equals(name)){ String message = messages.getMessage("dispatch.recursive", mapping.getPath());
log.error(message); throw new ServletException(message); }
/** * 在DispatchAction子类中需要Override此方法! * Method which is dispatched to when the request is a cancel button submit. * Subclasses of <code>DispatchAction</code> should override this method if * they wish to provide default behavior different than returning null. * @since Struts 1.2.0 */ protected ActionForward cancelled(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
return null; }

|