EvalTag skips implicit variable check if VariableResolver is null (for Jetty compatibility; SPR-7096)

master
Juergen Hoeller 15 years ago
parent eb7f8309e2
commit 7355dff967
  1. 17
      org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/tags/EvalTag.java

@ -19,6 +19,7 @@ package org.springframework.web.servlet.tags;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.el.VariableResolver;
import org.springframework.core.convert.ConversionService;
import org.springframework.expression.AccessException;
@ -40,6 +41,7 @@ import org.springframework.web.util.TagUtils;
* Supports the standard JSP evaluation context consisting of implicit variables and scoped attributes.
*
* @author Keith Donald
* @author Juergen Hoeller
* @since 3.0.1
*/
public class EvalTag extends HtmlEscapingAwareTag {
@ -140,17 +142,21 @@ public class EvalTag extends HtmlEscapingAwareTag {
private static class JspPropertyAccessor implements PropertyAccessor {
private final PageContext pageContext;
private final VariableResolver variableResolver;
public JspPropertyAccessor(PageContext pageContext) {
this.pageContext = pageContext;
this.variableResolver = pageContext.getVariableResolver();
}
public Class<?>[] getSpecificTargetClasses() {
return null;
}
public boolean canRead(EvaluationContext context, Object target, String name) throws AccessException {
return target == null && (resolveImplicitVariable(name) != null || this.pageContext.findAttribute(name) != null);
return (target == null && (resolveImplicitVariable(name) != null) ||
this.pageContext.findAttribute(name) != null);
}
public TypedValue read(EvaluationContext context, Object target, String name) throws AccessException {
@ -170,8 +176,11 @@ public class EvalTag extends HtmlEscapingAwareTag {
}
private Object resolveImplicitVariable(String name) throws AccessException {
if (this.variableResolver == null) {
return null;
}
try {
return this.pageContext.getVariableResolver().resolveVariable(name);
return this.variableResolver.resolveVariable(name);
}
catch (Exception ex) {
throw new AccessException(

Loading…
Cancel
Save