org.springframework.web.portlet.mvc

## Interface Controller

- All Known Implementing Classes:
    AbstractCommandController, AbstractController, AbstractFormController, AbstractWizardFormController, BaseCommandController, ParameterizableViewController, PortletModeNameViewController, PortletWrappingController, SimpleFormController

      public interface Controller

  Base portlet Controller interface, representing a component that receives RenderRequest/RenderResponse and ActionRequest/ActionResponse like a `Portlet` but is able to participate in an MVC workflow.

  Any implementation of the portlet Controller interface should be a reusable, threadsafe class, capable of handling multiple portlet requests throughout the lifecycle of an application. To be able to configure Controller(s) in an easy way, Controllers are usually JavaBeans.

  Workflow:

  After the DispatcherPortlet has received a request and has done its work to resolve locales, themes and suchlike, it tries to resolve a Controller to handle that request, using a `HandlerMapping`. When a Controller has been found, the `handleRenderRequest` or `handleActionRequest` method will be invoked, which is responsible for handling the actual request and - if applicable - returning an appropriate ModelAndView. So actually, these method are the main entrypoint for the `DispatcherPortlet` which delegates requests to controllers.

  So basically any direct implementation of the Controller interface just handles RenderRequests/ActionRequests and should return a ModelAndView, to be further used by the DispatcherPortlet. Any additional functionality such as optional validation, form handling, etc should be obtained through extending one of the abstract controller classes mentioned above.

  Since:
    2.0
  Author:
    William G. Thompson, Jr., John A. Lewis
  See Also:
    `ResourceAwareController`, `EventAwareController`, `SimpleControllerHandlerAdapter`, `AbstractController`, `PortletContextAware`

- - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `handleActionRequest(ActionRequest request, ActionResponse response)` Process the action request.
    `ModelAndView` | `handleRenderRequest(RenderRequest request, RenderResponse response)` Process the render request and return a ModelAndView object which the DispatcherPortlet will render.

- - ### Method Detail

    - #### handleActionRequest

          void handleActionRequest(ActionRequest request,
                                 ActionResponse response)
                                   throws Exception

      Process the action request. There is nothing to return.
      Parameters:
        `request` - current portlet action request
        `response` - current portlet action response
      Throws:
        `Exception` - in case of errors

    - #### handleRenderRequest

          ModelAndView handleRenderRequest(RenderRequest request,
                                         RenderResponse response)
                                           throws Exception

      Process the render request and return a ModelAndView object which the DispatcherPortlet will render. A `null` return value is not an error: It indicates that this object completed request processing itself, thus there is no ModelAndView to render.
      Parameters:
        `request` - current portlet render request
        `response` - current portlet render response
      Returns:
        a ModelAndView to render, or null if handled directly
      Throws:
        `Exception` - in case of errors