Open Source Repository

Home /jodd/jodd-3.3.2 | Repository Home


jodd/servlet/JspValueResolver.java
// Copyright (c) 2003-2012, Jodd Team (jodd.org). All Rights Reserved.

package jodd.servlet;

import jodd.bean.BeanUtil;
import jodd.bean.BeanUtilBean;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.PageContext;

/**
 * Resolves values on JSP page.
 */
public class JspValueResolver {

  protected final HttpServletRequest servletRequest;
  protected final PageContext pageContext;

  public JspValueResolver(HttpServletRequest servletRequest) {
    this.pageContext = null;
    this.servletRequest = servletRequest;
  }

  public JspValueResolver(PageContext pageContext) {
    this.pageContext = pageContext;
    this.servletRequest = (HttpServletRequestpageContext.getRequest();
  }

  // ---------------------------------------------------------------- resolves values

  /**
   * Resolves values: attributes and parameters.
   */
  public Object value(String name) {
    if (pageContext != null) {
      return resolveValue(name, pageContext);
    }
    return resolveValue(name, servletRequest);
  }

  /**
   * Resolves value from scopes.
   @see jodd.servlet.ServletUtil#value(HttpServletRequest, String)
   */
  public static Object resolveValue(String valueName, HttpServletRequest request) {
    return ServletUtil.value(request, valueName);
  }

  public static Object resolveValue(String valueName, PageContext page) {
    return ServletUtil.value(page, valueName);
  }

  public static Object resolveValue(String valueName) {
    return resolveValue(valueName, PageContextThreadLocal.get());
  }


  // ---------------------------------------------------------------- resolves attributes


  /**
   * Resolves attribute value from scopes.
   */
  public Object attr(String name) {
    if (pageContext != null) {
      return resolveAttribute(name, pageContext);
    }
    return resolveAttribute(name, servletRequest);
  }

  /**
   * Resolves attribute value from scopes.
   @see jodd.servlet.ServletUtil#attrValue(HttpServletRequest, String)
   */
  public static Object resolveAttribute(String attributeName, HttpServletRequest request) {
    return ServletUtil.attrValue(request, attributeName);
  }

  public static Object resolveAttribute(String attributeName, PageContext page) {
    return ServletUtil.attrValue(page, attributeName);
  }

  public static Object resolveAttribute(String attributeName) {
    return resolveAttribute(attributeName, PageContextThreadLocal.get());
  }

  // ---------------------------------------------------------------- reflection

  /**
   * Resolves property values from all scopes.
   @see #resolveProperty(String, HttpServletRequest)
   */
  public Object property(String name) {
    if (pageContext != null) {
      return resolveProperty(name, pageContext);
    }
    return resolveProperty(name, servletRequest);
  }


  /**
   * Resolves property from scopes. Property names contains special characters
   * such as dot, square bracket etc.
   */
  public static Object resolveProperty(String name, HttpServletRequest request) {
    String thisRef = BeanUtil.extractThisReference(name);
    Object value = resolveValue(thisRef, request);
    if (value == null) {
      return null;
    }
    //noinspection StringEquality
    if (thisRef == name) {
      return value;
    }
    name = BeanUtilBean.THIS_REF + name.substring(thisRef.length());
    return BeanUtil.getDeclaredPropertySilently(value, name);
  }


  /**
   * Resolves property from scopes. Property names contains special characters
   * such as dot, square bracket etc.
   */
  public static Object resolveProperty(String name, PageContext page) {
    String thisRef = BeanUtil.extractThisReference(name);
    Object value = resolveValue(thisRef, page);
    if (value == null) {
      return null;
    }
    //noinspection StringEquality
    if (thisRef == name) {
      return value;
    }
    name = BeanUtilBean.THIS_REF + name.substring(thisRef.length());
    return BeanUtil.getDeclaredPropertySilently(value, name);
  }

  public static Object resolveProperty(String name) {
    return resolveProperty(name, PageContextThreadLocal.get());
  }

}