org.apache.struts2.portlet.dispatcher

## Class Jsr168Dispatcher

- java.lang.Object
- - javax.portlet.GenericPortlet
  - - org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher

- All Implemented Interfaces:
    javax.portlet.EventPortlet, javax.portlet.Portlet, javax.portlet.PortletConfig, javax.portlet.ResourceServingPortlet, StrutsStatics
  Direct Known Subclasses:
    Jsr286Dispatcher

      public class Jsr168Dispatcher
      extends javax.portlet.GenericPortlet
      implements StrutsStatics

  Struts JSR-168 portlet dispatcher. Similar to the WW2 Servlet dispatcher, but adjusted to a portal environment. The portlet is configured through the `portlet.xml` descriptor. Examples and descriptions follow below:

  Author:
    Nils-Helge Garli, Rainer Hermanns

    Init parameters

    Name | Description | Default value
    --- | --- | ---
    portletNamespace | The namespace for the portlet in the xwork configuration. This namespace is prepended to all action lookups, and makes it possible to host multiple portlets in the same portlet application. If this parameter is set, the complete namespace will be `/portletNamespace/modeNamespace/actionName` | The default namespace
    viewNamespace | Base namespace in the xwork configuration for the `view` portlet mode | The default namespace
    editNamespace | Base namespace in the xwork configuration for the `edit` portlet mode | The default namespace
    helpNamespace | Base namespace in the xwork configuration for the `help` portlet mode | The default namespace
    defaultViewAction | Default action to invoke in the `view` portlet mode if no action is specified | `default`
    defaultEditAction | Default action to invoke in the `edit` portlet mode if no action is specified | `default`
    defaultHelpAction | Default action to invoke in the `help` portlet mode if no action is specified | `default`

    Example:

         <init-param>
             <!-- The view mode namespace. Maps to a namespace in the xwork config file -->
             <name>viewNamespace</name>
             <value>/view</value>
         </init-param>
         <init-param>
            <!-- The default action to invoke in view mode -->
            <name>defaultViewAction</name>
            <value>index</value>
         </init-param>
         <init-param>
             <!-- The view mode namespace. Maps to a namespace in the xwork config file -->
             <name>editNamespace</name>
             <value>/edit</value>
         </init-param>
         <init-param>
             <!-- The default action to invoke in view mode -->
             <name>defaultEditAction</name>
             <value>index</value>
         </init-param>
         <init-param>
             <!-- The view mode namespace. Maps to a namespace in the xwork config file -->
             <name>helpNamespace</name>
             <value>/help</value>
         </init-param>
         <init-param>
             <!-- The default action to invoke in view mode -->
             <name>defaultHelpAction</name>
             <value>index</value>
         </init-param>

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected String` | `portletNamespace`

    - ### Fields inherited from interface org.apache.struts2.StrutsStatics

      `HTTP_REQUEST, HTTP_RESPONSE, PAGE_CONTEXT, SERVLET_CONTEXT, SERVLET_DISPATCHER, STRUTS_ACTION_TAG_INVOCATION, STRUTS_PORTLET_CONTEXT`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `Jsr168Dispatcher()`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `HashMap<String,Object>` | `createContextMap(Map<String,Object> requestMap, Map<String,String[]> parameterMap, Map<String,Object> sessionMap, Map<String,Object> applicationMap, javax.portlet.PortletRequest request, javax.portlet.PortletResponse response, javax.servlet.http.HttpServletRequest servletRequest, javax.servlet.http.HttpServletResponse servletResponse, javax.servlet.ServletContext servletContext, javax.portlet.PortletConfig portletConfig, PortletPhase phase)` Merges all application and portlet attributes into a single `HashMap` to represent the entire `Action` context.
    `protected PortletServletResponse` | `createPortletServletResponse(javax.portlet.PortletResponse response)` Method to create a PortletServletResponse matching the used Portlet API, to be overridden for JSR286 Dispatcher.
    `void` | `destroy()`
    `protected ActionMapping` | `getActionMapping(javax.portlet.PortletRequest portletRequest, javax.servlet.http.HttpServletRequest servletRequest)` Gets the namespace of the action from the request.
    `protected Map<String,Object>` | `getApplicationMap()` Returns a Map of all application attributes.
    `protected String` | `getDefaultActionPath(javax.portlet.PortletRequest portletRequest)`
    `protected Locale` | `getLocale(javax.portlet.PortletRequest request)`
    `protected Map<String,String[]>` | `getParameterMap(javax.portlet.PortletRequest request)` Returns a Map of all request parameters.
    `protected Map<String,Object>` | `getRequestMap(javax.portlet.PortletRequest request)` Returns a Map of all request attributes.
    `protected Map<String,Object>` | `getSessionMap(javax.portlet.PortletRequest request)` Returns a Map of all session attributes.
    `void` | `init(javax.portlet.PortletConfig cfg)` Initialize the portlet with the init parameters from `portlet.xml`
    `void` | `processAction(javax.portlet.ActionRequest request, javax.portlet.ActionResponse response)` Service an action from the `event` phase.
    `void` | `render(javax.portlet.RenderRequest request, javax.portlet.RenderResponse response)` Service an action from the `render` phase.
    `void` | `serviceAction(javax.portlet.PortletRequest request, javax.portlet.PortletResponse response, Map<String,Object> requestMap, Map<String,String[]> parameterMap, Map<String,Object> sessionMap, Map<String,Object> applicationMap, String portletNamespace, PortletPhase phase)` Loads the action and executes it.
    `void` | `setActionMapper(ActionMapper actionMapper)`
    `protected void` | `setActionProxyFactory(ActionProxyFactory factory)` Convenience method to ease testing.

    - ### Methods inherited from class javax.portlet.GenericPortlet

      `doDispatch, doEdit, doHeaders, doHelp, doView, getContainerRuntimeOptions, getDefaultNamespace, getInitParameter, getInitParameterNames, getNextPossiblePortletModes, getPortletConfig, getPortletContext, getPortletName, getProcessingEventQNames, getPublicRenderParameterNames, getPublishingEventQNames, getResourceBundle, getSupportedLocales, getTitle, init, processEvent, serveResource`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### portletNamespace

          protected String portletNamespace

  - ### Constructor Detail

    - #### Jsr168Dispatcher

          public Jsr168Dispatcher()

  - ### Method Detail

    - #### init

          public void init(javax.portlet.PortletConfig cfg)
                    throws javax.portlet.PortletException

      Initialize the portlet with the init parameters from `portlet.xml`
      Specified by:
        `init` in interface `javax.portlet.Portlet`
      Overrides:
        `init` in class `javax.portlet.GenericPortlet`
      Parameters:
        `cfg` - portlet configuration
      Throws:
        `javax.portlet.PortletException` - in case of errors

    - #### processAction

          public void processAction(javax.portlet.ActionRequest request,
                                    javax.portlet.ActionResponse response)
                             throws javax.portlet.PortletException,
                                    IOException

      Service an action from the `event` phase.
      Specified by:
        `processAction` in interface `javax.portlet.Portlet`
      Overrides:
        `processAction` in class `javax.portlet.GenericPortlet`
      Parameters:
        `request` - action request
        `response` - action response
      Throws:
        `javax.portlet.PortletException` - in case of errors
        `IOException` - in case of IO errors
      See Also:
        `Portlet.processAction(javax.portlet.ActionRequest, javax.portlet.ActionResponse)`

    - #### render

          public void render(javax.portlet.RenderRequest request,
                             javax.portlet.RenderResponse response)
                      throws javax.portlet.PortletException,
                             IOException

      Service an action from the `render` phase.
      Specified by:
        `render` in interface `javax.portlet.Portlet`
      Overrides:
        `render` in class `javax.portlet.GenericPortlet`
      Parameters:
        `request` - render request
        `response` - render response
      Throws:
        `javax.portlet.PortletException` - in case of errors
        `IOException` - in case of IO errors
      See Also:
        `Portlet.render(javax.portlet.RenderRequest, javax.portlet.RenderResponse)`

    - #### createContextMap

          public HashMap<String,Object> createContextMap(Map<String,Object> requestMap,
                                                         Map<String,String[]> parameterMap,
                                                         Map<String,Object> sessionMap,
                                                         Map<String,Object> applicationMap,
                                                         javax.portlet.PortletRequest request,
                                                         javax.portlet.PortletResponse response,
                                                         javax.servlet.http.HttpServletRequest servletRequest,
                                                         javax.servlet.http.HttpServletResponse servletResponse,
                                                         javax.servlet.ServletContext servletContext,
                                                         javax.portlet.PortletConfig portletConfig,
                                                         PortletPhase phase)
                                                  throws IOException

      Merges all application and portlet attributes into a single `HashMap` to represent the entire `Action` context.
      Parameters:
        `requestMap` - a Map of all request attributes.
        `parameterMap` - a Map of all request parameters.
        `sessionMap` - a Map of all session attributes.
        `applicationMap` - a Map of all servlet context attributes.
        `request` - the PortletRequest object.
        `response` - the PortletResponse object.
        `servletRequest` - the HttpServletRequest object.
        `servletResponse` - the HttpServletResponse object.
        `servletContext` - the ServletContext object.
        `portletConfig` - the PortletConfig object.
        `phase` - The portlet phase (render or action, see `PortletConstants`)
      Returns:
        a HashMap representing the `Action` context.
      Throws:
        `IOException` - in case of IO errors

    - #### getLocale

          protected Locale getLocale(javax.portlet.PortletRequest request)

    - #### serviceAction

          public void serviceAction(javax.portlet.PortletRequest request,
                                    javax.portlet.PortletResponse response,
                                    Map<String,Object> requestMap,
                                    Map<String,String[]> parameterMap,
                                    Map<String,Object> sessionMap,
                                    Map<String,Object> applicationMap,
                                    String portletNamespace,
                                    PortletPhase phase)
                             throws javax.portlet.PortletException

      Loads the action and executes it. This method first creates the action context from the given parameters then loads an `ActionProxy` from the given action name and namespace. After that, the action is executed and output channels throught the response object.
      Parameters:
        `request` - the HttpServletRequest object.
        `response` - the HttpServletResponse object.
        `requestMap` - a Map of request attributes.
        `parameterMap` - a Map of request parameters.
        `sessionMap` - a Map of all session attributes.
        `applicationMap` - a Map of all application attributes.
        `portletNamespace` - the namespace or context of the action.
        `phase` - The portlet phase (render or action, see `PortletConstants`)
      Throws:
        `javax.portlet.PortletException` - in case of errors

    - #### getApplicationMap

          protected Map<String,Object> getApplicationMap()

      Returns a Map of all application attributes. Copies all attributes from the `PortletActionContext`into an `ApplicationMap`.
      Returns:
        a Map of all application attributes.

    - #### getActionMapping

          protected ActionMapping getActionMapping(javax.portlet.PortletRequest portletRequest,
                                                   javax.servlet.http.HttpServletRequest servletRequest)

      Gets the namespace of the action from the request. The namespace is the same as the portlet mode. E.g, view mode is mapped to namespace `view`, and edit mode is mapped to the namespace `edit`
      Parameters:
        `portletRequest` - the PortletRequest object.
        `servletRequest` - the ServletRequest to use
      Returns:
        the namespace of the action.

    - #### getDefaultActionPath

          protected String getDefaultActionPath(javax.portlet.PortletRequest portletRequest)

    - #### getParameterMap

          protected Map<String,String[]> getParameterMap(javax.portlet.PortletRequest request)
                                                  throws IOException

      Returns a Map of all request parameters. This implementation just calls `PortletRequest.getParameterMap()`.
      Parameters:
        `request` - the PortletRequest object.
      Returns:
        a Map of all request parameters.
      Throws:
        `IOException` - if an exception occurs while retrieving the parameter map.

    - #### getRequestMap

          protected Map<String,Object> getRequestMap(javax.portlet.PortletRequest request)

      Returns a Map of all request attributes. The default implementation is to wrap the request in a `RequestMap`. Override this method to customize how request attributes are mapped.
      Parameters:
        `request` - the PortletRequest object.
      Returns:
        a Map of all request attributes.

    - #### getSessionMap

          protected Map<String,Object> getSessionMap(javax.portlet.PortletRequest request)

      Returns a Map of all session attributes. The default implementation is to wrap the reqeust in a `SessionMap`. Override this method to customize how session attributes are mapped.
      Parameters:
        `request` - the PortletRequest object.
      Returns:
        a Map of all session attributes.

    - #### setActionProxyFactory

          protected void setActionProxyFactory(ActionProxyFactory factory)

      Convenience method to ease testing.
      Parameters:
        `factory` - action proxy factory

    - #### destroy

          public void destroy()

      Specified by:
        `destroy` in interface `javax.portlet.Portlet`
      Overrides:
        `destroy` in class `javax.portlet.GenericPortlet`

    - #### setActionMapper

          public void setActionMapper(ActionMapper actionMapper)

      Parameters:
        `actionMapper` - the actionMapper to set

    - #### createPortletServletResponse

          protected PortletServletResponse createPortletServletResponse(javax.portlet.PortletResponse response)

      Method to create a PortletServletResponse matching the used Portlet API, to be overridden for JSR286 Dispatcher.
      Parameters:
        `response` - The Response used for building the wrapper.
      Returns:
        The wrapper response for Servlet bound usage.

Copyright © 2000–2023 Apache Software Foundation. All rights reserved.