Save This Page
Home » spring-framework-2.5.4 » org.springframework » web » portlet » [javadoc | source]
org.springframework.web.portlet
abstract public class: FrameworkPortlet [javadoc | source]
java.lang.Object
   javax.portlet.GenericPortlet
      org.springframework.web.portlet.GenericPortletBean
         org.springframework.web.portlet.FrameworkPortlet

All Implemented Interfaces:
    ApplicationListener

Direct Known Subclasses:
    DispatcherPortlet

Base portlet for Spring's portlet framework. Provides integration with a Spring application context, in a JavaBean-based overall solution.

This class offers the following functionality:

Subclasses must implement #doActionService and #doRenderService to handle action and render requests. Because this extends GenericPortletBean rather than Portlet directly, bean properties are mapped onto it. Subclasses can override #initFrameworkPortlet() for custom initialization.

Regards a "contextClass" parameter at the portlet init-param level, falling back to the default context class (org.springframework.web.portlet.context.XmlPortletApplicationContext ) if not found. Note that, with the default FrameworkPortlet, a context class needs to implement the org.springframework.web.portlet.context.ConfigurablePortletApplicationContext SPI.

Passes a "contextConfigLocation" portlet init-param to the context instance, parsing it into potentially multiple file paths which can be separated by any number of commas and spaces, like "test-portlet.xml, myPortlet.xml". If not explicitly specified, the context implementation is supposed to build a default location from the namespace of the portlet.

Note: In case of multiple config locations, later bean definitions will override ones defined in earlier loaded files, at least when using one of Spring's default ApplicationContext implementations. This can be leveraged to deliberately override certain bean definitions via an extra XML file.

The default namespace is "'portlet-name'-portlet", e.g. "test-portlet" for a portlet-name "test" (leading to a "/WEB-INF/test-portlet.xml" default location with XmlPortletApplicationContext). The namespace can also be set explicitly via the "namespace" portlet init-param.

Field Summary
public static final  Class DEFAULT_CONTEXT_CLASS    Default context class for FrameworkPortlet. 
public static final  String DEFAULT_NAMESPACE_SUFFIX    Suffix for Portlet ApplicationContext namespaces. If a portlet of this class is given the name "test" in a context, the namespace used by the portlet will resolve to "test-portlet". 
public static final  String PORTLET_CONTEXT_PREFIX    Prefix for the PortletContext attribute for the Portlet ApplicationContext. The completion is the portlet name. 
public static final  String[] DEFAULT_USERINFO_ATTRIBUTE_NAMES    Default USER_INFO attribute names to search for the current username: "user.login.id", "user.name". 
Fields inherited from org.springframework.web.portlet.GenericPortletBean:
logger
Method from org.springframework.web.portlet.FrameworkPortlet Summary:
createPortletApplicationContext,   destroy,   doActionService,   doDispatch,   doRenderService,   getContextClass,   getContextConfigLocation,   getNamespace,   getPortletApplicationContext,   getPortletContextAttributeName,   getTitle,   getUserinfoUsernameAttributes,   getUsernameForRequest,   initFrameworkPortlet,   initPortletApplicationContext,   initPortletBean,   isPublishContext,   isPublishEvents,   onApplicationEvent,   onRefresh,   postProcessPortletApplicationContext,   processAction,   processRequest,   refresh,   setContextClass,   setContextConfigLocation,   setNamespace,   setPublishContext,   setPublishEvents,   setUserinfoUsernameAttributes
Methods from org.springframework.web.portlet.GenericPortletBean:
addRequiredProperty,   getPortletContext,   getPortletName,   init,   initBeanWrapper,   initPortletBean
Methods from java.lang.Object:
equals,   getClass,   hashCode,   notify,   notifyAll,   toString,   wait,   wait,   wait
Method from org.springframework.web.portlet.FrameworkPortlet Detail:
 protected ApplicationContext createPortletApplicationContext(ApplicationContext parent) throws BeansException 
    Instantiate the Portlet ApplicationContext for this portlet, either a default XmlPortletApplicationContext or a custom context class if set.

    This implementation expects custom contexts to implement ConfigurablePortletApplicationContext. Can be overridden in subclasses.

 public  void destroy() 
    Close the ApplicationContext of this portlet.
 abstract protected  void doActionService(ActionRequest request,
    ActionResponse response) throws Exception
    Subclasses must implement this method to do the work of action request handling.

    The contract is essentially the same as that for the processAction method of GenericPortlet.

    This class intercepts calls to ensure that exception handling and event publication takes place.

 protected final  void doDispatch(RenderRequest request,
    RenderResponse response) throws PortletException, IOException 
    Delegate render requests to processRequest/doRenderService.
 abstract protected  void doRenderService(RenderRequest request,
    RenderResponse response) throws Exception
    Subclasses must implement this method to do the work of render request handling.

    The contract is essentially the same as that for the doDispatch method of GenericPortlet.

    This class intercepts calls to ensure that exception handling and event publication takes place.

 public Class getContextClass() 
    Return the custom context class.
 public String getContextConfigLocation() 
    Return the explicit context config location, if any.
 public String getNamespace() 
    Return the namespace for this portlet, falling back to default scheme if no custom namespace was set. (e.g. "test-portlet" for a portlet named "test")
 public final ApplicationContext getPortletApplicationContext() 
    Return this portlet's ApplicationContext.
 public String getPortletContextAttributeName() 
    Return the PortletContext attribute name for this portlets's ApplicationContext.

    The default implementation returns PORTLET_CONTEXT_PREFIX + portlet name.

 protected String getTitle(RenderRequest renderRequest) 
    Overridden for friendlier behavior in unit tests.
 public String[] getUserinfoUsernameAttributes() 
    Returns the list of attributes that will be searched in the USER_INFO map when trying to find the username of the current user
 protected String getUsernameForRequest(PortletRequest request) 
    Determine the username for the given request.

    The default implementation first tries the UserPrincipal. If that does not exist, then it checks the USER_INFO map. Can be overridden in subclasses.

 protected  void initFrameworkPortlet() throws PortletException, BeansException 
    This method will be invoked after any bean properties have been set and the ApplicationContext has been loaded.

    The default implementation is empty; subclasses may override this method to perform any initialization they require.

 protected ApplicationContext initPortletApplicationContext() throws BeansException 
    Initialize and publish the Portlet ApplicationContext for this portlet.

    Delegates to #createPortletApplicationContext for actual creation. Can be overridden in subclasses.

 protected final  void initPortletBean() throws PortletException, BeansException 
    Overridden method of GenericPortletBean, invoked after any bean properties have been set. Creates this portlet's ApplicationContext.
 public boolean isPublishContext() 
    Return whether to publish this portlet's context as a PortletContext attribute.
 public boolean isPublishEvents() 
    Return whether this portlet should publish a PortletRequestHandledEvent at the end of each request.
 public  void onApplicationEvent(ApplicationEvent event) 
 protected  void onRefresh(ApplicationContext context) throws BeansException 
    Template method which can be overridden to add portlet-specific refresh work. Called after successful context refresh.

    This implementation is empty.

 protected  void postProcessPortletApplicationContext(ConfigurableApplicationContext pac) 
    Post-process the given Portlet ApplicationContext before it is refreshed and activated as context for this portlet.

    The default implementation is empty. refresh() will be called automatically after this method returns.

 public final  void processAction(ActionRequest request,
    ActionResponse response) throws PortletException, IOException 
    Delegate action requests to processRequest/doActionService.
 protected final  void processRequest(PortletRequest request,
    PortletResponse response) throws PortletException, IOException 
    Process this request, publishing an event regardless of the outcome. The actual event handling is performed by the abstract doActionService() and doRenderService() template methods.
 public  void refresh() throws BeansException 
    Refresh this portlet's application context, as well as the dependent state of the portlet.
 public  void setContextClass(Class contextClass) 
    Set a custom context class. This class must be of type ApplicationContext; when using the default FrameworkPortlet implementation, the context class must also implement ConfigurablePortletApplicationContext.
 public  void setContextConfigLocation(String contextConfigLocation) 
    Set the context config location explicitly, instead of relying on the default location built from the namespace. This location string can consist of multiple locations separated by any number of commas and spaces.
 public  void setNamespace(String namespace) 
    Set a custom namespace for this portlet, to be used for building a default context config location.
 public  void setPublishContext(boolean publishContext) 
    Set whether to publish this portlet's context as a PortletContext attribute, available to all objects in the web container. Default is true.

    This is especially handy during testing, although it is debatable whether it's good practice to let other application objects access the context this way.

 public  void setPublishEvents(boolean publishEvents) 
    Set whether this portlet should publish a PortletRequestHandledEvent at the end of each request. Default is true; can be turned off for a slight performance improvement, provided that no ApplicationListeners rely on such events.
 public  void setUserinfoUsernameAttributes(String[] userinfoUsernameAttributes) 
    Set the list of attributes to search in the USER_INFO map when trying to find the username of the current user.