|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectorg.springframework.context.support.ApplicationObjectSupport
org.springframework.web.portlet.context.PortletApplicationObjectSupport
org.springframework.web.portlet.handler.PortletContentGenerator
org.springframework.web.portlet.mvc.annotation.AnnotationMethodHandlerAdapter
public class AnnotationMethodHandlerAdapter
Implementation of the HandlerAdapter
interface that maps handler methods based on portlet modes, action/render phases
and request parameters expressed through the RequestMapping
annotation.
Supports request parameter binding through the RequestParam
annotation.
Also supports the ModelAttribute
annotation for exposing model attribute
values to the view, as well as InitBinder
for binder initialization methods
and SessionAttributes
for automatic session management of specific attributes.
This adapter can be customized through various bean properties.
A common use case is to apply shared binder initialization logic through
a custom WebBindingInitializer
.
setWebBindingInitializer(org.springframework.web.bind.support.WebBindingInitializer)
,
setSessionAttributeStore(org.springframework.web.bind.support.SessionAttributeStore)
Nested Class Summary | |
---|---|
private class |
AnnotationMethodHandlerAdapter.PortletHandlerMethodInvoker
Portlet-specific subclass of HandlerMethodInvoker . |
private static class |
AnnotationMethodHandlerAdapter.PortletHandlerMethodResolver
Portlet-specific subclass of HandlerMethodResolver . |
private static class |
AnnotationMethodHandlerAdapter.RequestMappingInfo
Holder for request mapping metadata. |
Field Summary | |
---|---|
private ConfigurableBeanFactory |
beanFactory
|
private int |
cacheSecondsForSessionAttributeHandlers
|
private WebArgumentResolver[] |
customArgumentResolvers
|
private ModelAndViewResolver[] |
customModelAndViewResolvers
|
private BeanExpressionContext |
expressionContext
|
static java.lang.String |
IMPLICIT_MODEL_RENDER_PARAMETER
|
static java.lang.String |
IMPLICIT_MODEL_SESSION_ATTRIBUTE
|
private java.util.Map<java.lang.Class<?>,AnnotationMethodHandlerAdapter.PortletHandlerMethodResolver> |
methodResolverCache
|
private int |
order
|
private ParameterNameDiscoverer |
parameterNameDiscoverer
|
private SessionAttributeStore |
sessionAttributeStore
|
private boolean |
synchronizeOnSession
|
private WebBindingInitializer |
webBindingInitializer
|
Fields inherited from class org.springframework.context.support.ApplicationObjectSupport |
---|
logger |
Fields inherited from interface org.springframework.core.Ordered |
---|
HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE |
Constructor Summary | |
---|---|
AnnotationMethodHandlerAdapter()
|
Method Summary | |
---|---|
protected PortletRequestDataBinder |
createBinder(PortletRequest request,
java.lang.Object target,
java.lang.String objectName)
Template method for creating a new PortletRequestDataBinder instance. |
protected ModelAndView |
doHandle(PortletRequest request,
PortletResponse response,
java.lang.Object handler)
|
private AnnotationMethodHandlerAdapter.PortletHandlerMethodResolver |
getMethodResolver(java.lang.Object handler)
Build a HandlerMethodResolver for the given handler type. |
int |
getOrder()
Return the order value of this object, with a higher value meaning greater in terms of sorting. |
void |
handleAction(ActionRequest request,
ActionResponse response,
java.lang.Object handler)
Use the given handler to handle this action request. |
void |
handleEvent(EventRequest request,
EventResponse response,
java.lang.Object handler)
Use the given handler to handle this event request. |
ModelAndView |
handleRender(RenderRequest request,
RenderResponse response,
java.lang.Object handler)
Use the given handler to handle this render request. |
ModelAndView |
handleResource(ResourceRequest request,
ResourceResponse response,
java.lang.Object handler)
Use the given handler to handle this resource request. |
private ModelAndView |
invokeHandlerMethod(PortletRequest request,
PortletResponse response,
java.lang.Object handler,
ExtendedModelMap implicitModel)
|
void |
setBeanFactory(BeanFactory beanFactory)
Callback that supplies the owning factory to a bean instance. |
void |
setCacheSecondsForSessionAttributeHandlers(int cacheSecondsForSessionAttributeHandlers)
Cache content produced by @SessionAttributes annotated handlers
for the given number of seconds. |
void |
setCustomArgumentResolver(WebArgumentResolver argumentResolver)
Set a custom WebArgumentResolver to use for special method parameter types. |
void |
setCustomArgumentResolvers(WebArgumentResolver[] argumentResolvers)
Set one or more custom WebArgumentResolvers to use for special method parameter types. |
void |
setCustomModelAndViewResolver(ModelAndViewResolver customModelAndViewResolver)
Set a custom ModelAndViewResolvers to use for special method return types. |
void |
setCustomModelAndViewResolvers(ModelAndViewResolver[] customModelAndViewResolvers)
Set one or more custom ModelAndViewResolvers to use for special method return types. |
void |
setOrder(int order)
Specify the order value for this HandlerAdapter bean. |
void |
setParameterNameDiscoverer(ParameterNameDiscoverer parameterNameDiscoverer)
Set the ParameterNameDiscoverer to use for resolving method parameter names if needed (e.g. |
void |
setSessionAttributeStore(SessionAttributeStore sessionAttributeStore)
Specify the strategy to store session attributes with. |
void |
setSynchronizeOnSession(boolean synchronizeOnSession)
Set if controller execution should be synchronized on the session, to serialize parallel invocations from the same client. |
void |
setWebBindingInitializer(WebBindingInitializer webBindingInitializer)
Specify a WebBindingInitializer which will apply pre-configured configuration to every DataBinder that this controller uses. |
boolean |
supports(java.lang.Object handler)
Given a handler instance, return whether or not this HandlerAdapter can support it. |
Methods inherited from class org.springframework.web.portlet.handler.PortletContentGenerator |
---|
applyCacheSeconds, cacheForSeconds, check, checkAndPrepare, checkAndPrepare, getCacheSeconds, isRequireSession, preventCaching, setCacheSeconds, setRequireSession |
Methods inherited from class org.springframework.web.portlet.context.PortletApplicationObjectSupport |
---|
getPortletContext, getTempDir, isContextRequired, setPortletContext |
Methods inherited from class org.springframework.context.support.ApplicationObjectSupport |
---|
getApplicationContext, getMessageSourceAccessor, initApplicationContext, initApplicationContext, requiredContextClass, setApplicationContext |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
public static final java.lang.String IMPLICIT_MODEL_SESSION_ATTRIBUTE
public static final java.lang.String IMPLICIT_MODEL_RENDER_PARAMETER
private WebBindingInitializer webBindingInitializer
private SessionAttributeStore sessionAttributeStore
private int cacheSecondsForSessionAttributeHandlers
private boolean synchronizeOnSession
private ParameterNameDiscoverer parameterNameDiscoverer
private WebArgumentResolver[] customArgumentResolvers
private ModelAndViewResolver[] customModelAndViewResolvers
private int order
private ConfigurableBeanFactory beanFactory
private BeanExpressionContext expressionContext
private final java.util.Map<java.lang.Class<?>,AnnotationMethodHandlerAdapter.PortletHandlerMethodResolver> methodResolverCache
Constructor Detail |
---|
public AnnotationMethodHandlerAdapter()
Method Detail |
---|
public void setWebBindingInitializer(WebBindingInitializer webBindingInitializer)
public void setSessionAttributeStore(SessionAttributeStore sessionAttributeStore)
Default is DefaultSessionAttributeStore
,
storing session attributes in the PortletSession, using the same
attribute name as in the model.
public void setCacheSecondsForSessionAttributeHandlers(int cacheSecondsForSessionAttributeHandlers)
@SessionAttributes
annotated handlers
for the given number of seconds. Default is 0, preventing caching completely.
In contrast to the "cacheSeconds" property which will apply to all general
handlers (but not to @SessionAttributes
annotated handlers), this
setting will apply to @SessionAttributes
annotated handlers only.
PortletContentGenerator.setCacheSeconds(int)
,
SessionAttributes
public void setSynchronizeOnSession(boolean synchronizeOnSession)
More specifically, the execution of each handler method will get synchronized if this flag is "true". The best available session mutex will be used for the synchronization; ideally, this will be a mutex exposed by HttpSessionMutexListener.
The session mutex is guaranteed to be the same object during
the entire lifetime of the session, available under the key defined
by the SESSION_MUTEX_ATTRIBUTE
constant. It serves as a
safe reference to synchronize on for locking on the current session.
In many cases, the PortletSession reference itself is a safe mutex as well, since it will always be the same object reference for the same active logical session. However, this is not guaranteed across different servlet containers; the only 100% safe way is a session mutex.
HttpSessionMutexListener
,
org.springframework.web.portlet.util.PortletUtils#getSessionMutex(javax.portlet.PortletSession)
public void setParameterNameDiscoverer(ParameterNameDiscoverer parameterNameDiscoverer)
Default is a LocalVariableTableParameterNameDiscoverer
.
public void setCustomArgumentResolver(WebArgumentResolver argumentResolver)
public void setCustomArgumentResolvers(WebArgumentResolver[] argumentResolvers)
public void setCustomModelAndViewResolver(ModelAndViewResolver customModelAndViewResolver)
public void setCustomModelAndViewResolvers(ModelAndViewResolver[] customModelAndViewResolvers)
public void setOrder(int order)
Default value is Integer.MAX_VALUE
, meaning that it's non-ordered.
Ordered.getOrder()
public int getOrder()
Ordered
Normally starting with 0, with Integer.MAX_VALUE
indicating the greatest value. Same order values will result
in arbitrary positions for the affected objects.
Higher values can be interpreted as lower priority. As a consequence, the object with the lowest value has highest priority (somewhat analogous to Servlet "load-on-startup" values).
getOrder
in interface Ordered
public void setBeanFactory(BeanFactory beanFactory)
BeanFactoryAware
Invoked after the population of normal bean properties
but before an initialization callback such as
InitializingBean.afterPropertiesSet()
or a custom init-method.
setBeanFactory
in interface BeanFactoryAware
beanFactory
- owning BeanFactory (never null
).
The bean can immediately call methods on the factory.BeanInitializationException
public boolean supports(java.lang.Object handler)
HandlerAdapter
A typical implementation:
return (handler instanceof MyHandler);
supports
in interface HandlerAdapter
handler
- handler object to check
public void handleAction(ActionRequest request, ActionResponse response, java.lang.Object handler) throws java.lang.Exception
HandlerAdapter
handleAction
in interface HandlerAdapter
request
- current action requestresponse
- current action responsehandler
- handler to use. This object must have previously been passed
to the supports
method of this interface, which must have
returned true.
java.lang.Exception
- in case of errorsjavax.portlet.Portlet#processAction
public ModelAndView handleRender(RenderRequest request, RenderResponse response, java.lang.Object handler) throws java.lang.Exception
HandlerAdapter
handleRender
in interface HandlerAdapter
request
- current render requestresponse
- current render responsehandler
- handler to use. This object must have previously been passed
to the supports
method of this interface, which must have
returned true
.
null
if the request has been handled directly
java.lang.Exception
- in case of errorsjavax.portlet.Portlet#render
public ModelAndView handleResource(ResourceRequest request, ResourceResponse response, java.lang.Object handler) throws java.lang.Exception
HandlerAdapter
handleResource
in interface HandlerAdapter
request
- current render requestresponse
- current render responsehandler
- handler to use. This object must have previously been passed
to the supports
method of this interface, which must have
returned true
.
null
if the request has been handled directly
java.lang.Exception
- in case of errorsjavax.portlet.ResourceServingPortlet#serveResource
public void handleEvent(EventRequest request, EventResponse response, java.lang.Object handler) throws java.lang.Exception
HandlerAdapter
handleEvent
in interface HandlerAdapter
request
- current action requestresponse
- current action responsehandler
- handler to use. This object must have previously been passed
to the supports
method of this interface, which must have
returned true.
java.lang.Exception
- in case of errorsjavax.portlet.EventPortlet#processEvent
protected ModelAndView doHandle(PortletRequest request, PortletResponse response, java.lang.Object handler) throws java.lang.Exception
java.lang.Exception
private ModelAndView invokeHandlerMethod(PortletRequest request, PortletResponse response, java.lang.Object handler, ExtendedModelMap implicitModel) throws java.lang.Exception
java.lang.Exception
private AnnotationMethodHandlerAdapter.PortletHandlerMethodResolver getMethodResolver(java.lang.Object handler)
protected PortletRequestDataBinder createBinder(PortletRequest request, java.lang.Object target, java.lang.String objectName) throws java.lang.Exception
The default implementation creates a standard PortletRequestDataBinder. This can be overridden for custom PortletRequestDataBinder subclasses.
request
- current portlet requesttarget
- the target object to bind onto (or null
if the binder is just used to convert a plain parameter value)objectName
- the objectName of the target object
java.lang.Exception
- in case of invalid state or argumentsPortletRequestDataBinder#bind(javax.portlet.PortletRequest)
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |