Save This Page
Home » spring-framework-2.5.4 » org.springframework » web » servlet » mvc » [javadoc | source]
org.springframework.web.servlet.mvc
public class: SimpleFormController [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.SimpleFormController

All Implemented Interfaces:
    Controller, ServletContextAware, ApplicationContextAware

Direct Known Subclasses:
    CancellableFormController

Concrete FormController implementation that provides configurable form and success views, and an onSubmit chain for convenient overriding. Automatically resubmits to the form view in case of validation errors, and renders the success view in case of a valid submission.

The workflow of this Controller does not differ much from the one described in the AbstractFormController . The difference is that you do not need to implement showForm and processFormSubmission : A form view and a success view can be configured declaratively.

Workflow (in addition to the superclass):

  1. Call to processFormSubmission which inspects the Errors object to see if any errors have occurred during binding and validation.
  2. If errors occured, the controller will return the configured formView, showing the form again (possibly rendering according error messages).
  3. If isFormChangeRequest is overridden and returns true for the given request, the controller will return the formView too. In that case, the controller will also suppress validation. Before returning the formView, the controller will invoke #onFormChange , giving sub-classes a chance to make modification to the command object. This is intended for requests that change the structure of the form, which should not cause validation and show the form in any case.
  4. If no errors occurred, the controller will call onSubmit using all parameters, which in case of the default implementation delegates to onSubmit with just the command object. The default implementation of the latter method will return the configured successView. Consider implementing #doSubmitAction doSubmitAction for simply performing a submit action and rendering the success view.

The submit behavior can be customized by overriding one of the onSubmit methods. Submit actions can also perform custom validation if necessary (typically database-driven checks), calling showForm in case of validation errors to show the form view again.

Exposed configuration properties (and those defined by superclass):
name default description
formView null Indicates what view to use when the user asks for a new form or when validation errors have occurred on form submission.
successView null Indicates what view to use when successful form submissions have occurred. Such a success view could e.g. display a submission summary. More sophisticated actions can be implemented by overriding one of the onSubmit() methods.

    author: Juergen - Hoeller
    author: Rob - Harrop
    since: 05.05.2003 -
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 SimpleFormController() 
Method from org.springframework.web.servlet.mvc.SimpleFormController Summary:
doSubmitAction,   getFormView,   getSuccessView,   isFormChangeRequest,   isFormChangeRequest,   onFormChange,   onFormChange,   onSubmit,   onSubmit,   onSubmit,   processFormSubmission,   referenceData,   referenceData,   setFormView,   setSuccessView,   showForm,   showForm,   suppressValidation
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.SimpleFormController Detail:
 protected  void doSubmitAction(Object command) throws Exception 
    Template method for submit actions. Called by the default implementation of the simplest #onSubmit(Object) variant.

    This is the preferred submit callback to implement if you want to perform an action (like storing changes to the database) and then render the success view with the command and Errors instance as model. You don't need to care about the success ModelAndView here.

 public final String getFormView() 
    Return the name of the view that should be used for form display.
 public final String getSuccessView() 
    Return the name of the view that should be shown on successful submit.
 protected boolean isFormChangeRequest(HttpServletRequest request) 
 protected boolean isFormChangeRequest(HttpServletRequest request,
    Object command) 
 protected  void onFormChange(HttpServletRequest request,
    HttpServletResponse response,
    Object command) throws Exception 
 protected  void onFormChange(HttpServletRequest request,
    HttpServletResponse response,
    Object command,
    BindException errors) throws Exception 
 protected ModelAndView onSubmit(Object command) throws Exception 
    Simplest onSubmit variant. Called by the default implementation of the #onSubmit(Object, BindException) variant.

    This implementation calls #doSubmitAction(Object) and returns null as ModelAndView, making the calling onSubmit method perform its default rendering of the success view.

    Subclasses can override this to provide custom submission handling that just depends on the command object. It's preferable to use either #onSubmit(Object, BindException) or #doSubmitAction(Object) , though: Use the former when you want to build your own ModelAndView; use the latter when you want to perform an action and forward to the successView.

 protected ModelAndView onSubmit(Object command,
    BindException errors) throws Exception 
    Simpler onSubmit variant. Called by the default implementation of the #onSubmit(HttpServletRequest, HttpServletResponse, Object, BindException) variant with all parameters.

    The default implementation calls #onSubmit(Object) , using the returned ModelAndView if actually implemented in a subclass. Else, the default behavior will apply: rendering the success view with the command and Errors instance as model.

    Subclasses can override this to provide custom submission handling that does not need request and response.

    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.

 protected ModelAndView onSubmit(HttpServletRequest request,
    HttpServletResponse response,
    Object command,
    BindException errors) throws Exception 
    Submit callback with all parameters. Called in case of submit without errors reported by the registered validator, or on every submit if no validator.

    The default implementation delegates to #onSubmit(Object, BindException) . For simply performing a submit action and rendering the specified success view, consider implementing #doSubmitAction rather than an onSubmit variant.

    Subclasses can override this to provide custom submission handling like storing the object to the database. Implementations can also perform custom validation and call showForm to return to the form. Do not implement multiple onSubmit methods: In that case, just this method will be called by the controller.

    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.

 protected ModelAndView processFormSubmission(HttpServletRequest request,
    HttpServletResponse response,
    Object command,
    BindException errors) throws Exception 
 protected Map referenceData(HttpServletRequest request) throws Exception 
    Create a reference data map for the given request. Called by the #referenceData(HttpServletRequest, Object, Errors) variant with all parameters.

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

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

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

 public final  void setFormView(String formView) 
    Set the name of the view that should be used for form display.
 public final  void setSuccessView(String successView) 
    Set the name of the view that should be shown on successful submit.
 protected ModelAndView showForm(HttpServletRequest request,
    HttpServletResponse response,
    BindException errors) throws Exception 
    This implementation shows the configured form view, delegating to the analogous #showForm(HttpServletRequest, HttpServletResponse, BindException, Map) variant with a "controlModel" argument.

    Can be called within #onSubmit(HttpServletRequest, HttpServletResponse, Object, BindException) implementations, to redirect back to the form in case of custom validation errors (errors not determined by the validator).

    Can be overridden in subclasses to show a custom view, writing directly to the response or preparing the response before rendering a view.

    If calling showForm with a custom control model in subclasses, it's preferable to override the analogous showForm version with a controlModel argument (which will handle both standard form showing and custom form showing then).

 protected ModelAndView showForm(HttpServletRequest request,
    HttpServletResponse response,
    BindException errors,
    Map controlModel) throws Exception 
    This implementation shows the configured form view.

    Can be called within #onSubmit(HttpServletRequest, HttpServletResponse, Object, BindException) implementations, to redirect back to the form in case of custom validation errors (errors not determined by the validator).

    Can be overridden in subclasses to show a custom view, writing directly to the response or preparing the response before rendering a view.

 protected boolean suppressValidation(HttpServletRequest request,
    Object command)