jakarta.servlet.jsp.el.ScopedAttributeELResolver Maven / Gradle / Ivy
/*
* Copyright (c) 1997, 2022 Oracle and/or its affiliates and others.
* All rights reserved.
* Copyright 2004 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package jakarta.servlet.jsp.el;
import jakarta.servlet.jsp.PageContext;
import jakarta.servlet.jsp.JspContext;
import jakarta.el.ELContext;
import jakarta.el.ELResolver;
import jakarta.el.ELException;
/**
* Defines variable resolution behavior for scoped attributes.
*
*
* This resolver handles variable resolutions where base
is null
. It searches
* PageContext.findAttribute()
for a matching attribute. If not found in the case of
* setValue
, it will create a new attribute in the page scope with the given name.
*
*
* @see jakarta.el.ELResolver
* @since JSP 2.1
*/
public class ScopedAttributeELResolver extends ELResolver {
/**
* If the base object is null
, searches the page, request, session and application scopes for an
* attribute with the given name and returns it if an attribute exists with the current name.
*
*
* The propertyResolved
property of the ELContext
object must be set to true
* by this resolver before returning if a scoped attribute is matched. 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.
*/
@Override
public Object getValue(ELContext context, Object base, Object property) {
if (context == null) {
throw new NullPointerException();
}
if (base == null) {
if (property instanceof String) {
String attribute = (String) property;
PageContext ctxt = (PageContext) context.getContext(JspContext.class);
Object value = ctxt.findAttribute(attribute);
if (value != null) {
context.setPropertyResolved(true);
}
return value;
}
}
return null;
}
/**
* 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.
*/
@Override
public Class