Save This Page
Home » spring-framework-2.5.5-with-dependencies » org.springframework » web » portlet » handler » [javadoc | source]
org.springframework.web.portlet.handler
public class: PortletModeParameterHandlerMapping [javadoc | source]
java.lang.Object
   org.springframework.context.support.ApplicationObjectSupport
      org.springframework.web.portlet.handler.AbstractHandlerMapping
         org.springframework.web.portlet.handler.AbstractMapBasedHandlerMapping
            org.springframework.web.portlet.handler.PortletModeParameterHandlerMapping

All Implemented Interfaces:
    HandlerMapping, Ordered, ApplicationContextAware

Implementation of the org.springframework.web.portlet.HandlerMapping interface to map from the current PortletMode and a request parameter to request handler beans. The mapping consists of two levels: first the PortletMode and then the parameter value. In order to be mapped, both elements must match the mapping definition.

This is a combination of the methods used in PortletModeHandlerMapping and ParameterHandlerMapping . Unlike those two classes, this mapping cannot be initialized with properties since it requires a two-level map.

The default name of the parameter is "action", but can be changed using setParameterName() .

By default, the same parameter value may not be used in two different portlet modes. This is so that if the portal itself changes the portlet mode, the request will no longer be valid in the mapping. This behavior can be changed with setAllowDupParameters() .

The bean configuration for this mapping will look somthing like this:

<bean id="portletModeParameterHandlerMapping" class="org.springframework.web.portlet.handler.PortletModeParameterHandlerMapping">
<property name="portletModeParameterMap">
<map>
<entry key="view"> <!-- portlet mode: view -->
<map>
<entry key="add"><ref bean="addItemHandler"/></entry>
<entry key="edit"><ref bean="editItemHandler"/></entry>
<entry key="delete"><ref bean="deleteItemHandler"/></entry>
</map>
</entry>
<entry key="edit"> <!-- portlet mode: edit -->
<map>
<entry key="prefs"><ref bean="preferencesHandler"/></entry>
<entry key="resetPrefs"><ref bean="resetPreferencesHandler"/></entry>
</map>
</entry>
</map>
</property>
</bean>

This mapping can be chained ahead of a PortletModeHandlerMapping , which can then provide defaults for each mode and an overall default as well.

Thanks to Rainer Schmitz and Yujin Kim for suggesting this mapping strategy!

Field Summary
public static final  String DEFAULT_PARAMETER_NAME    Default request parameter name to use for mapping to handlers: "action". 
Fields inherited from org.springframework.context.support.ApplicationObjectSupport:
logger
Method from org.springframework.web.portlet.handler.PortletModeParameterHandlerMapping Summary:
getLookupKey,   initApplicationContext,   registerHandler,   registerHandler,   registerHandlers,   setAllowDuplicateParameters,   setParameterName,   setPortletModeParameterMap
Methods from org.springframework.web.portlet.handler.AbstractMapBasedHandlerMapping:
getHandlerInternal,   getLookupKey,   registerHandler,   registerHandler,   registerHandlers,   setLazyInitHandlers
Methods from org.springframework.web.portlet.handler.AbstractHandlerMapping:
adaptInterceptor,   extendInterceptors,   getAdaptedInterceptors,   getDefaultHandler,   getHandler,   getHandlerExecutionChain,   getHandlerInternal,   getOrder,   initApplicationContext,   initInterceptors,   setApplyWebRequestInterceptorsToRenderPhaseOnly,   setDefaultHandler,   setInterceptors,   setOrder
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.portlet.handler.PortletModeParameterHandlerMapping Detail:
 protected Object getLookupKey(PortletRequest request) throws Exception 
    Returns a lookup key that combines the current PortletMode and the current value of the specified parameter.
 public  void initApplicationContext() throws BeansException 
    Calls the registerHandlers method in addition to the superclass's initialization.
 protected  void registerHandler(PortletMode mode,
    Map parameterMap) throws BeansException 
    Register all handlers specified in the given parameter map.
 protected  void registerHandler(PortletMode mode,
    String parameter,
    Object handler) throws IllegalStateException, BeansException 
    Register the given handler instance for the given PortletMode and parameter value, under an appropriate lookup key.
 protected  void registerHandlers(Map portletModeParameterMap) throws BeansException 
    Register all handlers specified in the Portlet mode map for the corresponding modes.
 public  void setAllowDuplicateParameters(boolean allowDuplicateParameters) 
    Set whether to allow duplicate parameter values across different portlet modes. Default is "false".

    Doing this is dangerous because the portlet mode can be changed by the portal itself and the only way to see that is a rerender of the portlet. If the same parameter value is legal in multiple modes, then a change in mode could result in a matched mapping that is not intended and the user could end up in a strange place in the application.

 public  void setParameterName(String parameterName) 
    Set the name of the parameter used for mapping to handlers.

    Default is "action".

 public  void setPortletModeParameterMap(Map portletModeParameterMap) 
    Set a Map with portlet mode names as keys and another Map as values. The sub-map has parameter names as keys and handler bean or bean names as values.

    Convenient for population with bean references.