FileDocCategorySizeDatePackage
ScopedAttributeELResolver.javaAPI DocGlassfish v2 API16798Fri May 04 22:34:28 BST 2007javax.servlet.jsp.el

ScopedAttributeELResolver

public 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.

see
javax.el.ELResolver
since
JSP 2.1

Fields Summary
Constructors Summary
Methods Summary
public java.lang.ClassgetCommonPropertyType(javax.el.ELContext context, java.lang.Object base)
If the base object is null, returns String.class. Otherwise, returns null.

param
context The context of this evaluation.
param
base Only null is handled by this resolver. Other values will result in a null return value.
return
null if base is not null; otherwise String.class.

        if (base == null) {
            return String.class;
        }
        return null;
    
public java.util.IteratorgetFeatureDescriptors(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 FeatureDescriptors:
  • {@link ELResolver#TYPE} - The current runtime type of the scoped attribute.
  • {@link ELResolver#RESOLVABLE_AT_DESIGN_TIME} - true.
  • param
    context The context of this evaluation.
    param
    base Only null is handled by this resolver. Other values will result in a null return value.
    return
    An Iterator containing one FeatureDescriptor object for each scoped attribute, or null if base is not null.

            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.ClassgetType(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.

    param
    context The context of this evaluation.
    param
    base Only null is handled by this resolver. Other values will result in an immediate return.
    param
    property The name of the scoped attribute to resolve.
    return
    If the propertyResolved property of ELContext was set to true, then Object.class; otherwise undefined.
    throws
    NullPointerException if context is null
    throws
    ELException if an exception was thrown while performing the property or variable resolution. The thrown exception must be included as the cause property of this exception, if available.

    
            if (context == null) {
                throw new NullPointerException();
            }
    
            if (base == null) {
                context.setPropertyResolved(true);
                return Object.class;
            }
            return null;
        
    public java.lang.ObjectgetValue(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.

    param
    context The context of this evaluation.
    param
    base Only null is handled by this resolver. Other values will result in an immediate return.
    param
    property The name of the scoped attribute to resolve.
    return
    If the propertyResolved property of ELContext was set to true, then the scoped attribute; otherwise undefined.
    throws
    NullPointerException if context is null
    throws
    ELException if an exception was thrown while performing the property or variable resolution. The thrown exception must be included as the cause property of this exception, if available.

    
            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 booleanisReadOnly(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.

    param
    context The context of this evaluation.
    param
    base Only null is handled by this resolver. Other values will result in an immediate return.
    param
    property The name of the scoped attribute.
    return
    If the propertyResolved property of ELContext was set to true, then false; otherwise undefined.
    throws
    NullPointerException if context is null.
    throws
    ELException if an exception was thrown while performing the property or variable resolution. The thrown exception must be included as the cause property of this exception, if available.

            if (context == null) {
                throw new NullPointerException();
            }
    
            if (base == null) {
                context.setPropertyResolved(true);
            }
            return false;
        
    public voidsetValue(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.

    param
    context The context of this evaluation.
    param
    base Only null is handled by this resolver. Other values will result in an immediate return.
    param
    property The name of the scoped attribute to set.
    param
    val The value for the scoped attribute.
    throws
    NullPointerException if context is null.
    throws
    ELException if an exception was thrown while performing the property or variable resolution. The thrown exception must be included as the cause property of this exception, if available.

            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);
                    }
                }
            }