ScopedAttributeELResolverpublic class ScopedAttributeELResolver extends ELResolver Defines variable resolution behavior for scoped attributes.
This resolver handles all variable resolutions (where base
is null . It searches PageContext.findAttribute()
for a matching attribute. If not found, it will return null ,
or in the case of setValue it will create a new attribute
in the page scope with the given name. |
Methods Summary |
---|
public java.lang.Class | getCommonPropertyType(javax.el.ELContext context, java.lang.Object base)If the base object is null , returns
String.class . Otherwise, returns null .
if (base == null) {
return String.class;
}
return null;
| public java.util.Iterator | getFeatureDescriptors(javax.el.ELContext context, java.lang.Object base)If the base object is null , returns an
Iterator containing FeatureDescriptor objects
with information about each scoped attribute resolved by this
resolver. Otherwise, returns null .
The Iterator returned must contain one instance of
{@link java.beans.FeatureDescriptor} for each scoped attribute found in
any scope. Each info object contains information about
a single scoped attribute, and is initialized as follows:
displayName - The name of the scoped attribute.
name - Same as displayName property.
shortDescription - A suitable description for the scoped
attribute. Should include the attribute's current scope
(page, request, session, application). Will vary by
implementation.
expert - false
hidden - false
preferred - true
In addition, the following named attributes must be set in the
returned FeatureDescriptor s:
{@link ELResolver#TYPE} - The current runtime type of the scoped attribute.
{@link ELResolver#RESOLVABLE_AT_DESIGN_TIME} - true .
Enumeration attrs;
ArrayList<FeatureDescriptor> list = new ArrayList<FeatureDescriptor>();
PageContext ctxt = (PageContext) context.getContext(JspContext.class);
attrs = ctxt.getAttributeNamesInScope(PageContext.PAGE_SCOPE);
while (attrs.hasMoreElements()) {
String name = (String) attrs.nextElement();
Object value = ctxt.getAttribute(name, PageContext.PAGE_SCOPE);
FeatureDescriptor descriptor = new FeatureDescriptor();
descriptor.setName(name);
descriptor.setDisplayName(name);
descriptor.setShortDescription("page scope attribute");
descriptor.setExpert(false);
descriptor.setHidden(false);
descriptor.setPreferred(true);
descriptor.setValue("type", value.getClass());
descriptor.setValue("resolvableAtDesignTime", Boolean.TRUE);
list.add(descriptor);
}
attrs = ctxt.getAttributeNamesInScope(PageContext.REQUEST_SCOPE);
while (attrs.hasMoreElements()) {
String name = (String) attrs.nextElement();
Object value = ctxt.getAttribute(name, PageContext.REQUEST_SCOPE);
FeatureDescriptor descriptor = new FeatureDescriptor();
descriptor.setName(name);
descriptor.setDisplayName(name);
descriptor.setShortDescription("request scope attribute");
descriptor.setExpert(false);
descriptor.setHidden(false);
descriptor.setPreferred(true);
descriptor.setValue("type", value.getClass());
descriptor.setValue("resolvableAtDesignTime", Boolean.TRUE);
list.add(descriptor);
}
attrs = ctxt.getAttributeNamesInScope(PageContext.SESSION_SCOPE);
while (attrs.hasMoreElements()) {
String name = (String) attrs.nextElement();
Object value = ctxt.getAttribute(name, PageContext.SESSION_SCOPE);
FeatureDescriptor descriptor = new FeatureDescriptor();
descriptor.setName(name);
descriptor.setDisplayName(name);
descriptor.setShortDescription("session scope attribute");
descriptor.setExpert(false);
descriptor.setHidden(false);
descriptor.setPreferred(true);
descriptor.setValue("type", value.getClass());
descriptor.setValue("resolvableAtDesignTime", Boolean.TRUE);
list.add(descriptor);
}
attrs = ctxt.getAttributeNamesInScope(PageContext.APPLICATION_SCOPE);
while (attrs.hasMoreElements()) {
String name = (String) attrs.nextElement();
Object value = ctxt.getAttribute(name, PageContext.APPLICATION_SCOPE);
FeatureDescriptor descriptor = new FeatureDescriptor();
descriptor.setName(name);
descriptor.setDisplayName(name);
descriptor.setShortDescription("application scope attribute");
descriptor.setExpert(false);
descriptor.setHidden(false);
descriptor.setPreferred(true);
descriptor.setValue("type", value.getClass());
descriptor.setValue("resolvableAtDesignTime", Boolean.TRUE);
list.add(descriptor);
}
return list.iterator();
| public java.lang.Class | getType(javax.el.ELContext context, java.lang.Object base, java.lang.Object property)If the base object is null , returns
Object.class to indicate that any type is valid to
set for a scoped attribute.
The propertyResolved property of the
ELContext object must be set to true by
this resolver before returning if base is null . If
this property is not true after this method is called,
the caller should ignore the return value.
if (context == null) {
throw new NullPointerException();
}
if (base == null) {
context.setPropertyResolved(true);
return Object.class;
}
return null;
| public java.lang.Object | getValue(javax.el.ELContext context, java.lang.Object base, java.lang.Object property)If the base object is null , searches the page,
request, session and application scopes for an attribute with
the given name and returns it, or null if no
attribute exists with the current name.
The propertyResolved property of the
ELContext object must be set to true by
this resolver before returning if base is null . If
this property is not true after this method is called,
the caller should ignore the return value.
if (context == null) {
throw new NullPointerException();
}
if (base == null) {
context.setPropertyResolved(true);
if (property instanceof String) {
String attribute = (String) property;
PageContext ctxt = (PageContext)
context.getContext(JspContext.class);
return ctxt.findAttribute(attribute);
}
}
return null;
| public boolean | isReadOnly(javax.el.ELContext context, java.lang.Object base, java.lang.Object property)If the base object is null , returns false
to indicate that scoped attributes are never read-only.
The propertyResolved property of the
ELContext object must be set to true by
this resolver before returning if base is null . If
this property is not true after this method is called,
the caller should ignore the return value.
if (context == null) {
throw new NullPointerException();
}
if (base == null) {
context.setPropertyResolved(true);
}
return false;
| public void | setValue(javax.el.ELContext context, java.lang.Object base, java.lang.Object property, java.lang.Object val)If the base object is null , sets an existing scoped
attribute to the new value, or creates a new scoped attribute if one
does not exist by this name.
If the provided attribute name matches the key of an attribute
in page scope, request scope, session scope, or application scope, the
corresponding attribute value will be replaced by the provided value.
Otherwise, a new page scope attribute will be created with the
given name and value.
The propertyResolved property of the
ELContext object must be set to true by
this resolver before returning if base is null . If
this property is not true after this method is called,
the caller should ignore the return value.
if (context == null) {
throw new NullPointerException();
}
if (base == null) {
context.setPropertyResolved(true);
if (property instanceof String) {
PageContext ctxt = (PageContext)
context.getContext(JspContext.class);
String attr = (String) property;
if (ctxt.getAttribute(attr, PageContext.REQUEST_SCOPE) != null)
ctxt.setAttribute(attr, val, PageContext.REQUEST_SCOPE);
else if (ctxt.getAttribute(attr, PageContext.SESSION_SCOPE) != null)
ctxt.setAttribute(attr, val, PageContext.SESSION_SCOPE);
else if (ctxt.getAttribute(attr, PageContext.APPLICATION_SCOPE) != null)
ctxt.setAttribute(attr, val, PageContext.APPLICATION_SCOPE);
else {
ctxt.setAttribute(attr, val, PageContext.PAGE_SCOPE);
}
}
}
|
|