Save This Page
Home » spring-framework-2.5.5-with-dependencies » org.springframework » web » servlet » mvc » [javadoc | source]
org.springframework.web.servlet.mvc
abstract public class: AbstractWizardFormController [javadoc | source]
java.lang.Object
   org.springframework.context.support.ApplicationObjectSupport
      org.springframework.web.context.support.WebApplicationObjectSupport
         org.springframework.web.servlet.support.WebContentGenerator
            org.springframework.web.servlet.mvc.AbstractController
               org.springframework.web.servlet.mvc.BaseCommandController
                  org.springframework.web.servlet.mvc.AbstractFormController
                     org.springframework.web.servlet.mvc.AbstractWizardFormController

All Implemented Interfaces:
    Controller, ServletContextAware, ApplicationContextAware

Direct Known Subclasses:
    OrderFormController

Form controller for typical wizard-style workflows.

In contrast to classic forms, wizards have more than one form view page. Therefore, there are various actions instead of one single submit action:

Finish and cancel actions can be triggered by request parameters, named PARAM_FINISH ("_finish") and PARAM_CANCEL ("_cancel"), ignoring parameter values to allow for HTML buttons. The target page for page changes can be specified by PARAM_TARGET, appending the page number to the parameter name (e.g. "_target1"). The action parameters are recognized when triggered by image buttons too (via "_finish.x", "_abort.x", or "_target1.x").

The current page number will be stored in the session. It can also be specified as request parameter PARAM_PAGE ("_page") in order to properly handle usage of the back button in a browser: In this case, a submission will always contain the correct page number, even if the user submitted from an old view.

The page can only be changed if it validates correctly, except if a "dirty back" or "dirty forward" is allowed. At finish, all pages get validated again to guarantee a consistent state.

Note that a validator's default validate method is not executed when using this class! Rather, the #validatePage implementation should call special validateXXX methods that the validator needs to provide, validating certain pieces of the object. These can be combined to validate the elements of individual pages.

Note: Page numbering starts with 0, to be able to pass an array consisting of the corresponding view names to the "pages" bean property.

Field Summary
public static final  String PARAM_FINISH    Parameter triggering the finish action. Can be called from any wizard page! 
public static final  String PARAM_CANCEL    Parameter triggering the cancel action. Can be called from any wizard page! 
public static final  String PARAM_TARGET    Parameter specifying the target page, appending the page number to the name. 
public static final  String PARAM_PAGE    Parameter specifying the current page as value. Not necessary on form pages, but allows to properly handle usage of the back button. 
Fields inherited from org.springframework.web.servlet.mvc.BaseCommandController:
DEFAULT_COMMAND_NAME
Fields inherited from org.springframework.web.servlet.support.WebContentGenerator:
METHOD_GET,  METHOD_HEAD,  METHOD_POST
Fields inherited from org.springframework.context.support.ApplicationObjectSupport:
logger
Constructor:
 public AbstractWizardFormController() 
Method from org.springframework.web.servlet.mvc.AbstractWizardFormController Summary:
getCurrentPage,   getInitialPage,   getInitialPage,   getPageAttribute,   getPageCount,   getPageCount,   getPageSessionAttributeName,   getPageSessionAttributeName,   getPages,   getTargetPage,   getTargetPage,   getViewName,   handleInvalidSubmit,   isAllowDirtyBack,   isAllowDirtyForward,   isCancelRequest,   isFinishRequest,   isFormSubmission,   onBindAndValidate,   onBindAndValidate,   postProcessPage,   processCancel,   processFinish,   processFormSubmission,   referenceData,   referenceData,   referenceData,   setAllowDirtyBack,   setAllowDirtyForward,   setPageAttribute,   setPages,   showForm,   showPage,   validatePage,   validatePage
Methods from org.springframework.web.servlet.mvc.AbstractFormController:
currentFormObject,   formBackingObject,   getCommand,   getErrorsForNewForm,   getFormSessionAttributeName,   getFormSessionAttributeName,   handleInvalidSubmit,   handleRequestInternal,   isBindOnNewForm,   isFormSubmission,   isSessionForm,   onBindOnNewForm,   onBindOnNewForm,   processFormSubmission,   referenceData,   setBindOnNewForm,   setSessionForm,   showForm,   showForm,   showForm,   showNewForm
Methods from org.springframework.web.servlet.mvc.BaseCommandController:
bindAndValidate,   checkCommand,   createBinder,   createCommand,   getBindingErrorProcessor,   getCommand,   getCommandClass,   getCommandName,   getMessageCodesResolver,   getPropertyEditorRegistrars,   getValidator,   getValidators,   getWebBindingInitializer,   initApplicationContext,   initBinder,   isValidateOnBinding,   onBind,   onBind,   onBindAndValidate,   prepareBinder,   setBindingErrorProcessor,   setCommandClass,   setCommandName,   setMessageCodesResolver,   setPropertyEditorRegistrar,   setPropertyEditorRegistrars,   setValidateOnBinding,   setValidator,   setValidators,   setWebBindingInitializer,   suppressBinding,   suppressValidation,   suppressValidation,   suppressValidation,   useDirectFieldAccess
Methods from org.springframework.web.servlet.mvc.AbstractController:
handleRequest,   handleRequestInternal,   isSynchronizeOnSession,   setSynchronizeOnSession
Methods from org.springframework.web.servlet.support.WebContentGenerator:
applyCacheSeconds,   applyCacheSeconds,   cacheForSeconds,   cacheForSeconds,   checkAndPrepare,   checkAndPrepare,   getCacheSeconds,   getSupportedMethods,   isRequireSession,   isUseCacheControlHeader,   isUseCacheControlNoStore,   isUseExpiresHeader,   preventCaching,   setCacheSeconds,   setRequireSession,   setSupportedMethods,   setUseCacheControlHeader,   setUseCacheControlNoStore,   setUseExpiresHeader
Methods from org.springframework.web.context.support.WebApplicationObjectSupport:
getServletContext,   getTempDir,   getWebApplicationContext,   initApplicationContext,   initServletContext,   isContextRequired,   setServletContext
Methods from org.springframework.context.support.ApplicationObjectSupport:
getApplicationContext,   getMessageSourceAccessor,   initApplicationContext,   initApplicationContext,   isContextRequired,   requiredContextClass,   setApplicationContext
Methods from java.lang.Object:
equals,   getClass,   hashCode,   notify,   notifyAll,   toString,   wait,   wait,   wait
Method from org.springframework.web.servlet.mvc.AbstractWizardFormController Detail:
 protected int getCurrentPage(HttpServletRequest request) 
    Return the current page number. Used by #processFormSubmission .

    The default implementation checks the page session attribute. Subclasses can override this for customized page determination.

 protected int getInitialPage(HttpServletRequest request) 
    Return the initial page of the wizard, that is, the page shown at wizard startup.

    The default implementation returns 0 for first page.

 protected int getInitialPage(HttpServletRequest request,
    Object command) 
 public final String getPageAttribute() 
    Return the name of the page attribute in the model.
 protected final int getPageCount() 
    Return the number of wizard pages. Useful to check whether the last page has been reached.

    Note that a concrete wizard form controller might override #getPageCount(HttpServletRequest, Object) to determine the page count dynamically. The default implementation of that extended getPageCount variant returns the static page count as determined by this getPageCount() method.

 protected int getPageCount(HttpServletRequest request,
    Object command) 
    Return the page count for this wizard form controller. The default implementation delegates to #getPageCount() .

    Can be overridden to dynamically adapt the page count.

 protected String getPageSessionAttributeName() 
    Return the name of the HttpSession attribute that holds the page object for this wizard form controller.

    Default is an internal name, of no relevance to applications, as the form session attribute is not usually accessed directly. Can be overridden to use an application-specific attribute name, which allows other code to access the session attribute directly.

 protected String getPageSessionAttributeName(HttpServletRequest request) 
    Return the name of the HttpSession attribute that holds the page object for this wizard form controller.

    The default implementation delegates to the #getPageSessionAttributeName() variant without arguments.

 public final String[] getPages() 
    Return the wizard pages, i.e. the view names for the pages. The array index corresponds to the page number.

    Note that a concrete wizard form controller might override #getViewName(HttpServletRequest, Object, int) to determine the view name for each page dynamically.

 protected int getTargetPage(HttpServletRequest request,
    int currentPage) 
    Return the target page specified in the request.

    The default implementation examines "_target" parameter (e.g. "_target1"). Subclasses can override this for customized target page determination.

 protected int getTargetPage(HttpServletRequest request,
    Object command,
    Errors errors,
    int currentPage) 
    Return the target page specified in the request.

    The default implementation delegates to #getTargetPage(HttpServletRequest, int) . Subclasses can override this for customized target page determination.

 protected String getViewName(HttpServletRequest request,
    Object command,
    int page) 
    Return the name of the view for the specified page of this wizard form controller.

    The default implementation takes the view name from the #getPages() array.

    Can be overridden to dynamically switch the page view or to return view names for dynamically defined pages.

 protected ModelAndView handleInvalidSubmit(HttpServletRequest request,
    HttpServletResponse response) throws Exception 
    Handle an invalid submit request, e.g. when in session form mode but no form object was found in the session (like in case of an invalid resubmit by the browser).

    The default implementation for wizard form controllers simply shows the initial page of a new wizard form. If you want to show some "invalid submit" message, you need to override this method.

 public final boolean isAllowDirtyBack() 
    Return whether "dirty back" is allowed.
 public final boolean isAllowDirtyForward() 
    Return whether "dirty forward" is allowed.
 protected boolean isCancelRequest(HttpServletRequest request) 
    Determine whether the incoming request is a request to cancel the processing of the current form.

    By default, this method returns true if a parameter matching the "_cancel" key is present in the request, otherwise it returns false. Subclasses may override this method to provide custom logic to detect a cancel request.

    The parameter is recognized both when sent as a plain parameter ("_cancel") or when triggered by an image button ("_cancel.x").

 protected boolean isFinishRequest(HttpServletRequest request) 
    Determine whether the incoming request is a request to finish the processing of the current form.

    By default, this method returns true if a parameter matching the "_finish" key is present in the request, otherwise it returns false. Subclasses may override this method to provide custom logic to detect a finish request.

    The parameter is recognized both when sent as a plain parameter ("_finish") or when triggered by an image button ("_finish.x").

 protected boolean isFormSubmission(HttpServletRequest request) 
    Consider an explicit finish or cancel request as a form submission too.
 protected final  void onBindAndValidate(HttpServletRequest request,
    Object command,
    BindException errors) throws Exception 
    Calls page-specific onBindAndValidate method.
 protected  void onBindAndValidate(HttpServletRequest request,
    Object command,
    BindException errors,
    int page) throws Exception 
    Callback for custom post-processing in terms of binding and validation. Called on each submit, after standard binding but before page-specific validation of this wizard form controller.

    Note: AbstractWizardFormController does not perform standand validation on binding but rather applies page-specific validation on processing the form submission.

 protected  void postProcessPage(HttpServletRequest request,
    Object command,
    Errors errors,
    int page) throws Exception 
    Post-process the given page after binding and validation, potentially updating its command object. The passed-in request might contain special parameters sent by the page.

    Only invoked when displaying another page or the same page again, not when finishing or cancelling.

 protected ModelAndView processCancel(HttpServletRequest request,
    HttpServletResponse response,
    Object command,
    BindException errors) throws Exception 
    Template method for processing the cancel action of this wizard.

    The default implementation throws a ServletException, saying that a cancel operation is not supported by this controller. Thus, you do not need to implement this template method if you do not support a cancel operation.

    Call errors.getModel() to populate the ModelAndView model with the command and the Errors instance, under the specified command name, as expected by the "spring:bind" tag.

 abstract protected ModelAndView processFinish(HttpServletRequest request,
    HttpServletResponse response,
    Object command,
    BindException errors) throws Exception
    Template method for processing the final action of this wizard.

    Call errors.getModel() to populate the ModelAndView model with the command and the Errors instance, under the specified command name, as expected by the "spring:bind" tag.

    You can call the #showPage method to return back to the wizard, in case of last-minute validation errors having been found that you would like to present to the user within the original wizard form.

 protected final ModelAndView processFormSubmission(HttpServletRequest request,
    HttpServletResponse response,
    Object command,
    BindException errors) throws Exception 
    Apply wizard workflow: finish, cancel, page change.
 protected Map referenceData(HttpServletRequest request,
    int page) throws Exception 
    Create a reference data map for the given request, consisting of bean name/bean instance pairs as expected by ModelAndView.

    The default implementation returns null. Subclasses can override this to set reference data used in the view.

 protected final Map referenceData(HttpServletRequest request,
    Object command,
    Errors errors) throws Exception 
    Calls page-specific referenceData method.
 protected Map referenceData(HttpServletRequest request,
    Object command,
    Errors errors,
    int page) throws Exception 
    Create a reference data map for the given request, consisting of bean name/bean instance pairs as expected by ModelAndView.

    The default implementation delegates to referenceData(HttpServletRequest, int). Subclasses can override this to set reference data used in the view.

 public final  void setAllowDirtyBack(boolean allowDirtyBack) 
    Set if "dirty back" is allowed, that is, if moving to a former wizard page is allowed in case of validation errors for the current page.
 public final  void setAllowDirtyForward(boolean allowDirtyForward) 
    Set if "dirty forward" is allowed, that is, if moving to a later wizard page is allowed in case of validation errors for the current page.
 public final  void setPageAttribute(String pageAttribute) 
    Set the name of the page attribute in the model, containing an Integer with the current page number.

    This will be necessary for single views rendering multiple view pages. It also allows for specifying the optional "_page" parameter.

 public final  void setPages(String[] pages) 
    Set the wizard pages, i.e. the view names for the pages. The array index is interpreted as page number.
 protected ModelAndView showForm(HttpServletRequest request,
    HttpServletResponse response,
    BindException errors) throws Exception 
    Show the first page as form view.

    This can be overridden in subclasses, e.g. to prepare wizard-specific error views in case of an Exception.

 protected final ModelAndView showPage(HttpServletRequest request,
    BindException errors,
    int page) throws Exception 
    Prepare the form model and view, including reference and error data, for the given page. Can be used in #processFinish implementations, to show the corresponding page in case of validation errors.
 protected  void validatePage(Object command,
    Errors errors,
    int page) 
    Template method for custom validation logic for individual pages. The default implementation is empty.

    Implementations will typically call fine-granular validateXXX methods of this instance's validator, combining them to validation of the corresponding pages. The validator's default validate method will not be called by a wizard form controller!

 protected  void validatePage(Object command,
    Errors errors,
    int page,
    boolean finish) 
    Template method for custom validation logic for individual pages. The default implementation calls #validatePage(Object, Errors, int) .

    Implementations will typically call fine-granular validateXXX methods of this instance's Validator, combining them to validation of the corresponding pages. The Validator's default validate method will not be called by a wizard form controller!