Class FlashELResolver
public class FlashELResolver
extends jakarta.el.ELResolver
Provide a feature semantically identical to the "flash" concept in Ruby on Rails.
The feature is exposed to users via a custom ELResolver
which introduces a new implicit object,
flash
. The flash functions as Map
and can be used in getValue( )
or
setValue(
)
expressions.
Usage
-
Using an Expression Language Expression, such as using
#{flash.foo}
as the value of an attribute in a Jakarta Server Pages page. -
Using the EL API, such as:
FacesContext context = FacesContext.getCurrentInstance(); ValueExpression flashExpression = context.getApplication(). createValueExpression(context.getELContext(), "#{flash.foo}", null, Object.class); flashExpression.setValue(context.getELContext(), "Foo's new value");
-
Using getting the
ELFlash
directly, such as:Map<String,Object> flash = ELFlash.getFlash(); flash.put("foo", "Foo's new value");
Consider three Faces views: viewA, viewB, and viewC. The user first views viewA, then clicks a button and is shown viewB, where she clicks a button and is shown viewC. If values are stored into the flash during the rendering or postback phases of viewA, they are available to during the rendering phase of viewB, but are not available during the rendering or postback phases of viewC. In other words, values stored into the flash on "this" request are accessible for the "next" request, but not thereafter.
There are three ways to access the flash.
The main entry point to this feature is the first one. This library includes a simple custom tag, jsfExt:set
, that evaluates an expression and sets its value into
another expression. jsfExt:set
can be used to store values into the flash from JSP pages, like this:
<jsfExt:set var="#{flash.foo}" value="fooValue"
/>
or this:
<jsfExt:set var="#{flash.keep.bar}" value="#{user.name}"
/>
or even this:
<jsfExt:set var="#{flash.now.baz}" value="#{cookie.userCookie}" />
<h:outputText value="#{flash.now.baz}" />
Related Classes
The complete list of classes that make up this feature is
FlashELResolver
-
Field Summary
-
Constructor Summary
Constructors Constructor Description FlashELResolver()
Not intended for manual invocation. -
Method Summary
Modifier and Type Method Description Class<?>
getCommonPropertyType(jakarta.el.ELContext context, Object base)
Ifbase
is non-null
and is the literal string "flash", returnObject.class
.Iterator<FeatureDescriptor>
getFeatureDescriptors(jakarta.el.ELContext elContext, Object base)
Returns an iterator ofFeatureDescriptors
for the current contents of the flash.Class<?>
getType(jakarta.el.ELContext elContext, Object base, Object property)
Return the validClass
for a future set operation, which will always benull
because sets happen via theMapELResolver
operating on theELFlash
instance as aMap
.Object
getValue(jakarta.el.ELContext elContext, Object base, Object property)
Hook into the EL resolution process to introduce theflash
implicit object.boolean
isReadOnly(jakarta.el.ELContext elContext, Object base, Object property)
Returnstrue
because write operations take place via theMapELResolver
on the actualELFlash
instance.void
setValue(jakarta.el.ELContext elContext, Object base, Object property, Object value)
This method will throwPropertyNotWritableException
if called with anull
base
and aproperty
value equal to the literal string "flash".
-
Constructor Details
-
FlashELResolver
public FlashELResolver()Not intended for manual invocation. Only called by the JSF Runtime.
-
-
Method Details
-
getValue
Hook into the EL resolution process to introduce the
flash
implicit object. Ifproperty
isnull
, take no action and returnnull
. ifbase
is null, return null. Ifbase
is an instance ofELFlash
and property is the literal string "keep", set a ThreadLocal property that will be inspected by the flash on the next link in the resolution chain and return theELFlash
instance. Ifbase
is an instance ofELFlash
andproperty
is the literal string "now", return the result of callinggetRequestMap( )
on theExternalContext
for theFacesContext
for this request. CallsetPropertyResolved(true)
on theELContext
where appropriate.- Specified by:
getValue
in classjakarta.el.ELResolver
- Throws:
jakarta.el.PropertyNotFoundException
- ifproperty
isnull
.
-
getType
Return the valid
Class
for a future set operation, which will always benull
because sets happen via theMapELResolver
operating on theELFlash
instance as aMap
.- Specified by:
getType
in classjakarta.el.ELResolver
- Throws:
jakarta.el.PropertyNotFoundException
- if property isnull
.
-
setValue
This method will throw
PropertyNotWritableException
if called with anull
base
and aproperty
value equal to the literal string "flash". This is because set operations normally go through theMapELResolver
via theELFlash
Map
.In other words, do not call this method directly to set a value into the flash! The only way to access the flash is either through JSP or via the EL API.
- Specified by:
setValue
in classjakarta.el.ELResolver
- Throws:
jakarta.el.PropertyNotFoundException
- ifbase
isnull
andproperty
isnull
.jakarta.el.PropertyNotWritableException
- ifbase
isnull
andproperty
is the literal string "flash".
-
isReadOnly
Returns
true
because write operations take place via theMapELResolver
on the actualELFlash
instance.- Specified by:
isReadOnly
in classjakarta.el.ELResolver
- Throws:
jakarta.el.PropertyNotFoundException
- ifbase
isnull
andproperty
isnull
.
-
getFeatureDescriptors
public Iterator<FeatureDescriptor> getFeatureDescriptors(jakarta.el.ELContext elContext, Object base)Returns an iterator of
FeatureDescriptors
for the current contents of the flash.- Specified by:
getFeatureDescriptors
in classjakarta.el.ELResolver
-
getCommonPropertyType
If
base
is non-null
and is the literal string "flash", returnObject.class
.- Specified by:
getCommonPropertyType
in classjakarta.el.ELResolver
-