/** * Licensed under the Artistic License; you may not use this file * except in compliance with the License. * You may obtain a copy of the License at * * http://displaytag.sourceforge.net/license.html * * THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. */ package org.displaytag.tags; import javax.servlet.jsp.PageContext; import javax.servlet.jsp.tagext.BodyTagSupport; import org.displaytag.exception.ObjectLookupException; import org.displaytag.util.LookupUtil; /** * Base template class. * @author bgsmith * @author Fabrizio Giustina * @version $Revision: 956 $ ($Author: fgiust $) */ public abstract class TemplateTag extends BodyTagSupport { /** * <p> * evaluate an expression in a way similar to LE in jstl. * </p> * <p> * the first token is supposed to be an object in the page scope (default scope) or one of the following: * </p> * <ul> * <li>pageScope</li> * <li>requestScope</li> * <li>sessionScope</li> * <li>applicationScope</li> * </ul> * <p> * Tokens after the object name are interpreted as javabean properties (accessed through getters), mapped or indexed * properties, using the jakarta common-beans library * </p> * @param expression expression to evaluate * @return Object result * @throws ObjectLookupException if unable to get a bean using the given expression */ protected Object evaluateExpression(String expression) throws ObjectLookupException { String expressionWithoutScope = expression; // default scope = request // this is for compatibility with the previous version, probably default should be PAGE int scope = PageContext.REQUEST_SCOPE; if (expression.startsWith("pageScope.")) //$NON-NLS-1$ { scope = PageContext.PAGE_SCOPE; expressionWithoutScope = expressionWithoutScope.substring(expressionWithoutScope.indexOf('.') + 1); } else if (expression.startsWith("requestScope.")) //$NON-NLS-1$ { scope = PageContext.REQUEST_SCOPE; expressionWithoutScope = expressionWithoutScope.substring(expressionWithoutScope.indexOf('.') + 1); } else if (expression.startsWith("sessionScope.")) //$NON-NLS-1$ { scope = PageContext.SESSION_SCOPE; expressionWithoutScope = expressionWithoutScope.substring(expressionWithoutScope.indexOf('.') + 1); } else if (expression.startsWith("applicationScope.")) //$NON-NLS-1$ { scope = PageContext.APPLICATION_SCOPE; expressionWithoutScope = expressionWithoutScope.substring(expressionWithoutScope.indexOf('.') + 1); } return LookupUtil.getBeanValue(this.pageContext, expressionWithoutScope, scope); } }