Class AbstractMvcView

java.lang.Object
org.springframework.webflow.mvc.view.AbstractMvcView
All Implemented Interfaces:
View
Direct Known Subclasses:
ServletMvcView

public abstract class AbstractMvcView extends Object implements View
Base view implementation for the Spring Web MVC Servlet frameworks.
Author:
Keith Donald
  • Constructor Details

    • AbstractMvcView

      public AbstractMvcView(org.springframework.web.servlet.View view, RequestContext requestContext)
      Creates a new MVC view.
      Parameters:
      view - the Spring MVC view to render
      requestContext - the current flow request context
  • Method Details

    • setExpressionParser

      public void setExpressionParser(ExpressionParser expressionParser)
      Sets the expression parser to use to parse model expressions.
      Parameters:
      expressionParser - the expression parser
    • setConversionService

      public void setConversionService(ConversionService conversionService)
      Sets the service to use to expose formatters for field values.
      Parameters:
      conversionService - the conversion service
    • setValidator

      public void setValidator(org.springframework.validation.Validator validator)
    • setValidationHintResolver

      public void setValidationHintResolver(ValidationHintResolver validationHintResolver)
    • setBinderConfiguration

      public void setBinderConfiguration(BinderConfiguration binderConfiguration)
      Sets the configuration describing how this view should bind to its model to access data for rendering.
      Parameters:
      binderConfiguration - the model binder configuration
    • setMessageCodesResolver

      public void setMessageCodesResolver(org.springframework.validation.MessageCodesResolver messageCodesResolver)
      Set the message codes resolver to use to resolve bind and validation failure message codes.
      Parameters:
      messageCodesResolver - the binding error message code resolver to use
    • setFieldMarkerPrefix

      public void setFieldMarkerPrefix(String fieldMarkerPrefix)
      Specify a prefix that can be used for parameters that mark potentially empty fields, having "prefix + field" as name. Such a marker parameter is checked by existence: You can send any value for it, for example "visible". This is particularly useful for HTML checkboxes and select options.

      Default is "_", for "_FIELD" parameters (e.g. "_subscribeToNewsletter"). Set this to null if you want to turn off the empty field check completely.

      HTML checkboxes only send a value when they're checked, so it is not possible to detect that a formerly checked box has just been unchecked, at least not with standard HTML means.

      This auto-reset mechanism addresses this deficiency, provided that a marker parameter is sent for each checkbox field, like "_subscribeToNewsletter" for a "subscribeToNewsletter" field. As the marker parameter is sent in any case, the data binder can detect an empty field and automatically reset its value.

    • setEventIdParameterName

      public void setEventIdParameterName(String eventIdParameterName)
      Sets the name of the request parameter to use to lookup user events signaled by this view. If not specified, the default is _eventId
      Parameters:
      eventIdParameterName - the event id parameter name
    • render

      public void render() throws IOException
      Description copied from interface: View
      Render this view's content.
      Specified by:
      render in interface View
      Throws:
      IOException - if an IO Exception occured rendering the view
    • userEventQueued

      public boolean userEventQueued()
      Description copied from interface: View
      True if there is a user event queued this view should process.
      Specified by:
      userEventQueued in interface View
      Returns:
      true if a user event is queued, false if not
    • processUserEvent

      public void processUserEvent()
      Description copied from interface: View
      Process the queued user event. Should only be called when View.userEventQueued() returns true. After calling this method, a flow event may be raised that should be handled in the Web Flow system.
      Specified by:
      processUserEvent in interface View
      See Also:
    • getUserEventState

      public Serializable getUserEventState()
      Description copied from interface: View
      A memento holding the results of processing a user event. Used to allow transient view state such as binding and validation errors to survive a flow execution redirect.
      Specified by:
      getUserEventState in interface View
      Returns:
      the serializable user event state object, or null if no event state needs managing
      See Also:
    • hasFlowEvent

      public boolean hasFlowEvent()
      Description copied from interface: View
      True if a call to View.processUserEvent() raised a flow event the current state should handle. Call View.getFlowEvent() to access the Event.
      Specified by:
      hasFlowEvent in interface View
      Returns:
      true if yes, false otherwise
    • getFlowEvent

      public Event getFlowEvent()
      Description copied from interface: View
      Get the flow event the current state should handle. Returns an Event object when View.hasFlowEvent() returns true. Returns null otherwise.
      Specified by:
      getFlowEvent in interface View
      Returns:
      the event, or null if there is no event for the flow system to handle
    • saveState

      public void saveState()
      Description copied from interface: View
      Saves any state associated with this view out to view scope. Called when exiting a ViewState to allow for any changes applied after postback processing to be captured and reflected when going back. Can be a no-op for views that store no view state.
      Specified by:
      saveState in interface View
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • getRequestContext

      protected RequestContext getRequestContext()
      Returns the current flow request context.
      Returns:
      the flow request context
    • getView

      protected org.springframework.web.servlet.View getView()
      Returns the Spring MVC view to render
      Returns:
      the view
    • getConversionService

      protected ConversionService getConversionService()
      Returns:
      the configured ConversionService
    • doRender

      protected abstract void doRender(Map<String,?> model) throws Exception
      Template method subclasses should override to execute the view rendering logic.
      Parameters:
      model - the view model data
      Throws:
      Exception - an exception occurred rendering the view
    • getEventId

      protected String getEventId()
      Returns the id of the user event being processed.
      Returns:
      the user event
    • shouldBind

      protected boolean shouldBind(Object model, TransitionDefinition transition)
      Determines if model data binding should be invoked given the Transition that matched the current user event being processed. Returns true unless the bind attribute of the Transition has been set to false. Subclasses may override.
      Parameters:
      model - the model data binding would be performed on
      transition - the matched transition
      Returns:
      true if binding should occur, false if not
    • getMappingResults

      protected MappingResults getMappingResults()
      Returns the results of binding to the view's model, if model binding has occurred.
      Returns:
      the binding (mapping) results
    • getBinderConfiguration

      protected BinderConfiguration getBinderConfiguration()
      Returns the binding configuration that defines how to connect properties of the model to UI elements.
      Returns:
      an instance of BinderConfiguration or null.
    • getExpressionParser

      protected ExpressionParser getExpressionParser()
      Returns the EL parser to be used for data binding purposes.
      Returns:
      an instance of ExpressionParser.
    • getFieldMarkerPrefix

      protected String getFieldMarkerPrefix()
      Returns the prefix that can be used for parameters that mark potentially empty fields.
      Returns:
      the prefix value.
    • determineEventId

      protected String determineEventId(RequestContext context)
      Obtain the user event from the current flow request. The default implementation returns the value of the request parameter with name eventIdParameterName. Subclasses may override.
      Parameters:
      context - the current flow request context
      Returns:
      the user event that occurred
    • bind

      protected MappingResults bind(Object model)

      Causes the model to be populated from information contained in request parameters.

      If a view has binding configuration then only model fields specified in the binding configuration will be considered. In the absence of binding configuration all request parameters will be used to update matching fields on the model.

      Parameters:
      model - the model to be updated
      Returns:
      an instance of MappingResults with information about the results of the binding.
    • addModelBindings

      protected void addModelBindings(DefaultMapper mapper, Set<String> parameterNames, Object model)

      Adds a DefaultMapping for every configured view BinderConfiguration.Binding for which there is an incoming request parameter. If there is no matching incoming request parameter, a special mapping is created that will set the target field on the model to an empty value (typically null).

      Parameters:
      mapper - the mapper to which mappings will be added
      parameterNames - the request parameters
      model - the model
    • addMapping

      protected void addMapping(DefaultMapper mapper, BinderConfiguration.Binding binding, Object model)

      Creates and adds a DefaultMapping for the given BinderConfiguration.Binding. Information such as the model field name, if the field is required, and whether type conversion is needed will be passed on from the binding to the mapping.

      Note: with Spring 3 type conversion and formatting now in use in Web Flow, it is no longer necessary to use named converters on binding elements. The preferred approach is to register Spring 3 formatters. Named converters are supported for backwards compatibility only and will not result in use of the Spring 3 type conversion system at runtime.

      Parameters:
      mapper - the mapper to add the mapping to
      binding - the binding element
      model - the model
    • addDefaultMappings

      protected void addDefaultMappings(DefaultMapper mapper, Set<String> parameterNames, Object model)
      Add a DefaultMapping instance for all incoming request parameters except those having a special field marker prefix. This method is used when binding configuration was not specified on the view.
      Parameters:
      mapper - the mapper to add mappings to
      parameterNames - the request parameter names
      model - the model
    • addEmptyValueMapping

      protected void addEmptyValueMapping(DefaultMapper mapper, String field, Object model)
      Adds a special DefaultMapping that results in setting the target field on the model to an empty value (typically null).
      Parameters:
      mapper - the mapper to add the mapping to
      field - the field for which a mapping is to be added
      model - the model
    • addDefaultMapping

      protected void addDefaultMapping(DefaultMapper mapper, String parameter, Object model)
      Adds a DefaultMapping between the given request parameter name and a matching model field.
      Parameters:
      mapper - the mapper to add the mapping to
      parameter - the request parameter name
      model - the model
    • shouldValidate

      protected boolean shouldValidate(Object model, TransitionDefinition transition)
      Determines if model validation should execute given the Transition that matched the current user event being processed. Returns true unless the validate attribute of the Transition has been set to false, or model data binding errors occurred and the global validateOnBindingErrors flag is set to false. Subclasses may override.
      Parameters:
      model - the model data binding would be performed on
      transition - the matched transition
      Returns:
      true if binding should occur, false if not
    • createMessageResolver

      protected MessageResolver createMessageResolver(MappingResult error)