/**
  * Evaluates an expression within the scope of this processor's context.
  *
  * @param expression The String expression
  * @param type Expected result type
  * @param defaultValue Default value to return in case of error
  */
 public <T> T evaluate(String expression, Class<T> type, T defaultValue) {
   try {
     ValueExpression expr = expressions.parse(expression, type);
     Object result = expr.getValue(elContext);
     return type.cast(result);
   } catch (ELException e) {
     logger.log(
         Level.WARNING,
         "EL failure for gadget {0}: {1}",
         new Object[] {getTemplateContext().getGadget().getContext().getUrl(), e.getMessage()});
     return defaultValue;
   }
 }