code: private Object evaluateExpressionInternal(String expression, String attrName, PageContext pageContext)
              throws JspException
      {
          if (logger.isDebugEnabled())
              logger.debug("evaluate expression=\"" + expression + "\"");
  
          Object result = null;
          try {
              VariableResolver vr = ImplicitObjectUtil.getReadVariableResolver(pageContext);
              result = getExpressionEvaluator().evaluateStrict(expression, vr);
          }
          catch (ExpressionEvaluationException ee) {
              // if there is an expression evaluation error set the error and return null
              if (logger.isWarnEnabled())
                  logger.warn(Bundle.getString("Tags_ExpressionEvaluationFailure", expression));
  
              // create the expression info an add it to the error tracking
              EvalErrorInfo info = new EvalErrorInfo();
              info.evalExcp = ee;
              info.expression = expression;
              info.attr = attrName;
              info.tagType = _tag.getTagName();
  
              // report the error
              _tag.registerTagError(info);
              return null;
          }
          catch (Exception e) {
              String s = Bundle.getString("Tags_ExpressionEvaluationException", new Object[]{expression, e.toString()});
              _tag.registerTagError(s, e);
              return null;
          }
  
          if (logger.isDebugEnabled()) logger.debug("resulting object: " + result);
          return result;
      }
docs: This is the real implementation of evaluateExpression.
  @param expression
  @param attrName
  @return
  @throws JspException