📄 lookuputil.java
字号:
/**
* 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.util;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
import java.util.Map;
import javax.servlet.jsp.PageContext;
import org.apache.commons.beanutils.NestedNullException;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.Validate;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.displaytag.exception.ObjectLookupException;
/**
* Utility class with methods for object and properties retrieving.
* @author Fabrizio Giustina
* @version $Id: LookupUtil.java 985 2005-12-31 13:56:12Z fgiust $
*/
public final class LookupUtil
{
/**
* logger.
*/
private static Log log = LogFactory.getLog(LookupUtil.class);
/**
* don't instantiate a LookupUtil.
*/
private LookupUtil()
{
// unused
}
/**
* Read an object from the pagecontext with the specified scope and eventually lookup a property in it.
* @param pageContext PageContext
* @param beanAndPropertyName String expression with bean name and attributes
* @param scope One of the following values:
* <ul>
* <li>PageContext.PAGE_SCOPE</li>
* <li>PageContext.REQUEST_SCOPE</li>
* <li>PageContext.SESSION_SCOPE</li>
* <li>PageContext.APPLICATION_SCOPE</li>
* </ul>
* @return Object
* @throws ObjectLookupException for errors while retrieving a property in the bean
*/
public static Object getBeanValue(PageContext pageContext, String beanAndPropertyName, int scope)
throws ObjectLookupException
{
if (beanAndPropertyName.indexOf('.') != -1)
{
// complex: property from a bean
String objectName = StringUtils.substringBefore(beanAndPropertyName, ".");
String beanProperty = StringUtils.substringAfter(beanAndPropertyName, ".");
Object beanObject;
if (log.isDebugEnabled())
{
log.debug("getBeanValue - bean: {" + objectName + "}, property: {" + beanProperty + "}");
}
// get the bean
beanObject = pageContext.getAttribute(objectName, scope);
// if null return
if (beanObject == null)
{
return null;
}
// go get the property
return getBeanProperty(beanObject, beanProperty);
}
// simple, only the javabean
if (log.isDebugEnabled())
{
log.debug("getBeanValue - bean: {" + beanAndPropertyName + "}");
}
return pageContext.getAttribute(beanAndPropertyName, scope);
}
/**
* <p>
* Returns the value of a property in the given bean.
* </p>
* <p>
* Handle <code>NestedNullException</code> returning nulls and other exceptions returning
* <code>ObjectLookupException</code>.
* </p>
* @param bean javabean
* @param name name of the property to read from the javabean
* @return Object
* @throws ObjectLookupException for errors while retrieving a property in the bean
*/
public static Object getBeanProperty(Object bean, String name) throws ObjectLookupException
{
Validate.notNull(bean, "No bean specified");
Validate.notNull(name, "No name specified");
if (log.isDebugEnabled())
{
log.debug("getProperty [" + name + "] on bean " + bean);
}
try
{
return getProperty(bean, name);
}
catch (IllegalAccessException e)
{
throw new ObjectLookupException(LookupUtil.class, bean, name, e);
}
catch (InvocationTargetException e)
{
throw new ObjectLookupException(LookupUtil.class, bean, name, e);
}
catch (NoSuchMethodException e)
{
throw new ObjectLookupException(LookupUtil.class, bean, name, e);
}
catch (NestedNullException nne)
{
// don't throw exceptions for nulls
return null;
}
catch (IllegalArgumentException e)
{
// don't throw exceptions for nulls; the bean and name have already been checked; this is being thrown when
// the bean property value is itself null.
log
.debug(
"Caught IllegalArgumentException from beanutils while looking up " + name + " in bean " + bean,
e);
return null;
}
}
/**
* Return the value of the (possibly nested) property of the specified name, for the specified bean, with no type
* conversions.
* @param bean Bean whose property is to be extracted
* @param name Possibly nested name of the property to be extracted
* @return Object
* @throws NoSuchMethodException
* @throws InvocationTargetException
* @throws IllegalAccessException
* @throws BeanPropertyLookupException in caso di errori nella lettura di propriet
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -