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):
successView. Consider implementing doSubmitAction(Object) 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. |
| Fields inherited from org.springframework.context.supportApplicationObjectSupport |
|---|
| Fields inherited from org.springframework.web.servlet.mvcBaseCommandController |
|---|
| Fields inherited from org.springframework.web.servlet.supportWebContentGenerator |
|---|
| Constructor Summary |
|---|
|
Create a new SimpleFormController. |
| Method Summary | |
|---|---|
| protected void |
Template method for submit actions. |
| String |
Return the name of the view that should be used for form display. |
| String |
Return the name of the view that should be shown on successful submit. |
| protected boolean |
Determine whether the given request is a form change request. |
| protected void |
Called during form submission if isFormChangeRequest(HttpServletRequest) returns true.
|
| protected void |
Simpler onFormChange variant, called by the full version
onFormChange(request, response, command, errors).
|
| protected ModelAndView |
Submit callback with all parameters. |
| protected ModelAndView |
Simpler onSubmit version.
|
| protected ModelAndView |
Simplest onSubmit version.
|
| protected ModelAndView |
This implementation calls showForm in case of errors,
and delegates to onSubmit's full version else.
|
| protected Map |
Create a reference data map for the given request and command, consisting of bean name/bean instance pairs as expected by ModelAndView. |
| protected Map |
Create a reference data map for the given request. |
| void |
Set the name of the view that should be used for form display. |
| void |
Set the name of the view that should be shown on successful submit. |
| protected ModelAndView |
This implementation shows the configured form view, delegating to the analogous showForm version with a controlModel argument. |
| protected ModelAndView |
This implementation shows the configured form view. |
| protected boolean |
This implementation delegates to isFormChangeRequest:
A form change request changes the appearance of the form
and should not get validated but just show the new form.
|
| Methods inherited from org.springframework.web.servlet.mvcAbstractController |
|---|
| Methods inherited from org.springframework.contextApplicationContextAware |
|---|
| Methods inherited from org.springframework.context.supportApplicationObjectSupport |
|---|
| Methods inherited from org.springframework.web.servlet.mvcController |
|---|
| Methods inherited from java.langObject |
|---|
| Methods inherited from org.springframework.web.context.supportWebApplicationObjectSupport |
|---|
public SimpleFormController
(
)
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.
Gets called by suppressValidation and processFormSubmission. Consequently, this single method determines to suppress validation and to show the form view in any case.
protected
void
onFormChange
(
HttpServletRequest
request,
HttpServletResponse
response,
Object
command,
BindException
errors
)
true. Allows subclasses to implement custom logic
to modify the command object to directly modify data in the form.
Default implementation delegates to
onFormChange(request, response, command).
protected
void
onFormChange
(
HttpServletRequest
request,
HttpServletResponse
response,
Object
command
)
onFormChange variant, called by the full version
onFormChange(request, response, command, errors).
Default implementation is empty.
protected
ModelAndView
onSubmit
(
HttpServletRequest
request,
HttpServletResponse
response,
Object
command,
BindException
errors
)
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 version.
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.
onSubmit version. Called by the default implementation
of the onSubmit version with all parameters.
Default implementation calls onSubmit(command), 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.
onSubmit version. Called by the default implementation
of the onSubmit version with command and BindException parameters.
This implementation calls doSubmitAction 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(command, errors) or doSubmitAction(command),
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
processFormSubmission
(
HttpServletRequest
request,
HttpServletResponse
response,
Object
command,
BindException
errors
)
showForm in case of errors,
and delegates to onSubmit's full version else.
This can only be overridden to check for an action that should be executed
without respect to binding errors, like a cancel action. To just handle successful
submissions without binding errors, override one of the onSubmit
methods or doSubmitAction.
sdsdvsdvsdv
Default implementation delegates to referenceData(request). Subclasses can override this to set reference data used in the view.
Default implementation returns null. Subclasses can override this to set reference data used in the view.
protected
ModelAndView
showForm
(
HttpServletRequest
request,
HttpServletResponse
response,
BindException
errors
)
Can be called within onSubmit implementations, to redirect back to the form in case of custom validation errors (i.e. 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
)
Can be called within onSubmit implementations, to redirect back to the form in case of custom validation errors (i.e. 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.
isFormChangeRequest:
A form change request changes the appearance of the form
and should not get validated but just show the new form.
Subclasses should set the following properties, either in the constructor or via a BeanFactory: commandName, commandClass, sessionForm, formView, successView. Note that commandClass doesn't need to be set when overriding
formBackingObject, as this determines the class anyway.