Class FlashELResolver
- java.lang.Object
-
- jakarta.el.ELResolver
-
- com.sun.faces.context.flash.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 asMap
and can be used ingetValue( )
orsetValue( )
expressions.Usage
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.
-
Using an Expression Language Expression, such as using
#{flash.foo}
as the value of an attribute in a 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");
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
ELFlash
-
Using an Expression Language Expression, such as using
-
-
Constructor Summary
Constructors Constructor Description FlashELResolver()
Not intended for manual invocation.
-
Method Summary
All Methods Instance Methods Concrete Methods 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".
-
-
-
Method Detail
-
getValue
public Object getValue(jakarta.el.ELContext elContext, Object base, Object property)
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
public Class<?> getType(jakarta.el.ELContext elContext, Object base, Object property)
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
public void setValue(jakarta.el.ELContext elContext, Object base, Object property, Object value)
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 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
public boolean isReadOnly(jakarta.el.ELContext elContext, Object base, Object property)
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.- Overrides:
getFeatureDescriptors
in classjakarta.el.ELResolver
-
-