public class FacesRequestAttributes extends Object implements RequestAttributes
RequestAttributes
adapter for a JSF FacesContext
.
Used as default in a JSF environment, wrapping the current FacesContext.
NOTE: In contrast to ServletRequestAttributes
, this variant does
not support destruction callbacks for scoped attributes, neither for the
request scope nor for the session scope. If you rely on such implicit destruction
callbacks, consider defining a Spring RequestContextListener
in your
web.xml
.
Requires JSF 2.0 or higher, as of Spring 4.0.
FacesContext.getExternalContext()
,
ExternalContext.getRequestMap()
,
ExternalContext.getSessionMap()
,
RequestContextHolder.currentRequestAttributes()
REFERENCE_REQUEST, REFERENCE_SESSION, SCOPE_REQUEST, SCOPE_SESSION
Constructor and Description |
---|
FacesRequestAttributes(FacesContext facesContext)
Create a new FacesRequestAttributes adapter for the given FacesContext.
|
Modifier and Type | Method and Description |
---|---|
Object |
getAttribute(String name,
int scope)
Return the value for the scoped attribute of the given name, if any.
|
protected Map<String,Object> |
getAttributeMap(int scope)
Return the JSF attribute Map for the specified scope
|
String[] |
getAttributeNames(int scope)
Retrieve the names of all attributes in the scope.
|
protected ExternalContext |
getExternalContext()
Return the JSF ExternalContext that this adapter operates on.
|
protected FacesContext |
getFacesContext()
Return the JSF FacesContext that this adapter operates on.
|
String |
getSessionId()
Return an id for the current underlying session.
|
Object |
getSessionMutex()
Expose the best available mutex for the underlying session:
that is, an object to synchronize on for the underlying session.
|
void |
registerDestructionCallback(String name,
Runnable callback,
int scope)
Register a callback to be executed on destruction of the
specified attribute in the given scope.
|
void |
removeAttribute(String name,
int scope)
Remove the scoped attribute of the given name, if it exists.
|
Object |
resolveReference(String key)
Resolve the contextual reference for the given key, if any.
|
void |
setAttribute(String name,
Object value,
int scope)
Set the value for the scoped attribute of the given name,
replacing an existing value (if any).
|
public FacesRequestAttributes(FacesContext facesContext)
facesContext
- the current FacesContextFacesContext.getCurrentInstance()
protected final FacesContext getFacesContext()
protected final ExternalContext getExternalContext()
FacesContext.getExternalContext()
protected Map<String,Object> getAttributeMap(int scope)
scope
- constant indicating request or session scopeRequestAttributes.SCOPE_REQUEST
,
RequestAttributes.SCOPE_SESSION
public Object getAttribute(String name, int scope)
RequestAttributes
getAttribute
in interface RequestAttributes
name
- the name of the attributescope
- the scope identifiernull
if not foundpublic void setAttribute(String name, Object value, int scope)
RequestAttributes
setAttribute
in interface RequestAttributes
name
- the name of the attributevalue
- the value for the attributescope
- the scope identifierpublic void removeAttribute(String name, int scope)
RequestAttributes
Note that an implementation should also remove a registered destruction callback for the specified attribute, if any. It does, however, not need to execute a registered destruction callback in this case, since the object will be destroyed by the caller (if appropriate).
removeAttribute
in interface RequestAttributes
name
- the name of the attributescope
- the scope identifierpublic String[] getAttributeNames(int scope)
RequestAttributes
getAttributeNames
in interface RequestAttributes
scope
- the scope identifierpublic void registerDestructionCallback(String name, Runnable callback, int scope)
RequestAttributes
Implementations should do their best to execute the callback at the appropriate time: that is, at request completion or session termination, respectively. If such a callback is not supported by the underlying runtime environment, the callback must be ignored and a corresponding warning should be logged.
Note that 'destruction' usually corresponds to destruction of the
entire scope, not to the individual attribute having been explicitly
removed by the application. If an attribute gets removed via this
facade's RequestAttributes.removeAttribute(String, int)
method, any registered
destruction callback should be disabled as well, assuming that the
removed object will be reused or manually destroyed.
NOTE: Callback objects should generally be serializable if they are being registered for a session scope. Otherwise the callback (or even the entire session) might not survive web app restarts.
registerDestructionCallback
in interface RequestAttributes
name
- the name of the attribute to register the callback forcallback
- the destruction callback to be executedscope
- the scope identifierpublic Object resolveReference(String key)
RequestAttributes
At a minimum: the HttpServletRequest/PortletRequest reference for key "request", and the HttpSession/PortletSession reference for key "session".
resolveReference
in interface RequestAttributes
key
- the contextual keynull
if none foundpublic String getSessionId()
RequestAttributes
getSessionId
in interface RequestAttributes
null
)public Object getSessionMutex()
RequestAttributes
getSessionMutex
in interface RequestAttributes
null
)