热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Ognl对象图导航语言源码

--------------------------------------------------------------------------Copyright(c)19


// --------------------------------------------------------------------------
// Copyright (c) 1998-2004, Drew Davidson and Luke Blanshard
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
// Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
// Neither the name of the Drew Davidson nor the names of its contributors
// may be used to endorse or promote products derived from this software
// without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
// OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
// AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
// DAMAGE.
// --------------------------------------------------------------------------
package ognl;
import ognl.enhance.ExpressionAccessor;
import java.io.StringReader;
import java.util.Map;
/**
*


* This class provides static methods for parsing and interpreting OGNL expressions.
*


*


* The simplest use of the Ognl class is to get the value of an expression from an object, without
* extra context or pre-parsing.
*


*
*

*
* import ognl.Ognl; import ognl.OgnlException; try { result = Ognl.getValue(expression, root); }
* catch (OgnlException ex) { // Report error or recover }
*
*

*
*


* This will parse the expression given and evaluate it against the root object given, returning the
* result. If there is an error in the expression, such as the property is not found, the exception
* is encapsulated into an {@link ognl.OgnlException OgnlException}.
*


*


* Other more sophisticated uses of Ognl can pre-parse expressions. This provides two advantages: in
* the case of user-supplied expressions it allows you to catch parse errors before evaluation and
* it allows you to cache parsed expressions into an AST for better speed during repeated use. The
* pre-parsed expression is always returned as an Object to simplify use for programs
* that just wish to store the value for repeated use and do not care that it is an AST. If it does
* care it can always safely cast the value to an AST type.
*


*


* The Ognl class also takes a context map as one of the parameters to the set and get
* methods. This allows you to put your own variables into the available namespace for OGNL
* expressions. The default context contains only the #root and #context
* keys, which are required to be present. The addDefaultContext(Object, Map) method
* will alter an existing Map to put the defaults in. Here is an example that shows
* how to extract the documentName property out of the root object and append a
* string with the current user name in parens:
*


*
*

*
* private Map cOntext= new HashMap(); public void setUserName(String value) {
* context.put("userName", value); } try { // get value using our own custom context map result =
* Ognl.getValue("documentName + \" (\" + ((#userName == null) ? \"\" : #userName) +
* \")\"", context, root); } catch (OgnlException ex) { // Report error or recover }
*
*

*
* @author Luke Blanshard (blanshlu@netscape.net)
*
@author Drew Davidson (drew@ognl.org)
*
@version 27 June 1999
*/
public abstract class Ognl
{
/**
* Parses the given OGNL expression and returns a tree representation of the expression that can
* be used by Ognl static methods.
*
*
@param expression
* the OGNL expression to be parsed
*
@return a tree representation of the expression
*
@throws ExpressionSyntaxException
* if the expression is malformed
*
@throws OgnlException
* if there is a pathological environmental problem
*/
public static Object parseExpression(String expression)
throws OgnlException
{
try {
OgnlParser parser
= new OgnlParser(new StringReader(expression));
return parser.topLevelExpression();
}
catch (ParseException e) {
throw new ExpressionSyntaxException(expression, e);
}
catch (TokenMgrError e) {
throw new ExpressionSyntaxException(expression, e);
}
}
/**
* Parses and compiles the given expression using the {
@link ognl.enhance.OgnlExpressionCompiler} returned
* from {
@link ognl.OgnlRuntime#getCompiler()}.
*
*
@param context
* The context to use.
*
@param root
* The root object for the given expression.
*
@param expression
* The expression to compile.
*
*
@return The node with a compiled accessor set on {@link ognl.Node#getAccessor()} if compilation
* was successfull. In instances where compilation wasn‘t possible because of a partially null
* expression the {
@link ExpressionAccessor} instance may be null and the compilation of this expression
* still possible at some as yet indertermined point in the future.
*
*
@throws Exception If a compilation error occurs.
*/
public static Node compileExpression(OgnlContext context, Object root, String expression)
throws Exception
{
Node expr
= (Node)Ognl.parseExpression(expression);
OgnlRuntime.compileExpression(context, expr, root);
return expr;
}
/**
* Creates and returns a new standard naming context for evaluating an OGNL expression.
*
*
@param root
* the root of the object graph
*
@return a new Map with the keys root and context set
* appropriately
*/
public static Map createDefaultContext(Object root)
{
return addDefaultContext(root, null, null, null, new OgnlContext());
}
/**
* Creates and returns a new standard naming context for evaluating an OGNL expression.
*
*
@param root
* The root of the object graph.
*
@param classResolver
* The resolver used to instantiate {
@link Class} instances referenced in the expression.
*
*
@return a new OgnlContext with the keys root and context set
* appropriately
*/
public static Map createDefaultContext(Object root, ClassResolver classResolver)
{
return addDefaultContext(root, classResolver, null, null, new OgnlContext());
}
/**
* Creates and returns a new standard naming context for evaluating an OGNL expression.
*
*
@param root
* The root of the object graph.
*
@param classResolver
* The resolver used to instantiate {
@link Class} instances referenced in the expression.
*
@param converter
* Converter used to convert return types of an expression in to their desired types.
*
*
@return a new Map with the keys root and context set
* appropriately
*/
public static Map createDefaultContext(Object root, ClassResolver classResolver, TypeConverter converter)
{
return addDefaultContext(root, classResolver, converter, null, new OgnlContext());
}
/**
* Creates and returns a new standard naming context for evaluating an OGNL expression.
*
*
@param root
* The root of the object graph.
*
@param classResolver
* The resolver used to instantiate {
@link Class} instances referenced in the expression.
*
@param converter
* Converter used to convert return types of an expression in to their desired types.
*
@param memberAccess
* Java security handling object to determine semantics for accessing normally private/protected
* methods / fields.
*
@return a new Map with the keys root and context set
* appropriately
*/
public static Map createDefaultContext(Object root, ClassResolver classResolver,
TypeConverter converter, MemberAccess memberAccess)
{
return addDefaultContext(root, classResolver, converter, memberAccess, new OgnlContext());
}
/**
* Appends the standard naming context for evaluating an OGNL expression into the context given
* so that cached maps can be used as a context.
*
*
@param root
* the root of the object graph
*
@param context
* the context to which OGNL context will be added.
*
@return Context Map with the keys root and context set
* appropriately
*/
public static Map addDefaultContext(Object root, Map context)
{
return addDefaultContext(root, null, null, null, context);
}
/**
* Appends the standard naming context for evaluating an OGNL expression into the context given
* so that cached maps can be used as a context.
*
*
@param root
* The root of the object graph.
*
@param classResolver
* The resolver used to instantiate {
@link Class} instances referenced in the expression.
*
@param context
* The context to which OGNL context will be added.
*
*
@return Context Map with the keys root and context set
* appropriately
*/
public static Map addDefaultContext(Object root, ClassResolver classResolver, Map context)
{
return addDefaultContext(root, classResolver, null, null, context);
}
/**
* Appends the standard naming context for evaluating an OGNL expression into the context given
* so that cached maps can be used as a context.
*
*
@param root
* The root of the object graph.
*
@param classResolver
* The resolver used to instantiate {
@link Class} instances referenced in the expression.
*
@param converter
* Converter used to convert return types of an expression in to their desired types.
*
@param context
* The context to which OGNL context will be added.
*
*
@return Context Map with the keys root and context set
* appropriately
*/
public static Map addDefaultContext(Object root, ClassResolver classResolver,
TypeConverter converter, Map context)
{
return addDefaultContext(root, classResolver, converter, null, context);
}
/**
* Appends the standard naming context for evaluating an OGNL expression into the context given
* so that cached maps can be used as a context.
*
*
@param root
* the root of the object graph
*
@param classResolver
* The class loading resolver that should be used to resolve class references.
*
@param converter
* The type converter to be used by default.
*
@param memberAccess
* Definition for handling private/protected access.
*
@param context
* Default context to use, if not an {
@link OgnlContext} will be dumped into
* a new {
@link OgnlContext} object.
*
@return Context Map with the keys root and context set
* appropriately
*/
public static Map addDefaultContext(Object root, ClassResolver classResolver,
TypeConverter converter, MemberAccess memberAccess, Map context)
{
OgnlContext result;
if (!(context instanceof OgnlContext)) {
result
= new OgnlContext();
result.setValues(context);
}
else {
result
= (OgnlContext) context;
}
if (classResolver != null) {
result.setClassResolver(classResolver);
}
if (converter != null) {
result.setTypeConverter(converter);
}
if (memberAccess != null) {
result.setMemberAccess(memberAccess);
}
result.setRoot(root);
return result;
}
/**
* Configures the {
@link ClassResolver} to use for the given context. Will be used during
* expression parsing / execution to resolve class names.
*
*
@param context
* The context to place the resolver.
*
@param classResolver
* The resolver to use to resolve classes.
*/
public static void setClassResolver(Map context, ClassResolver classResolver)
{
context.put(OgnlContext.CLASS_RESOLVER_CONTEXT_KEY, classResolver);
}
/**
* Gets the previously stored {
@link ClassResolver} for the given context - if any.
*
*
@param context
* The context to get the configured resolver from.
*
*
@return The resolver instance, or null if none found.
*/
public static ClassResolver getClassResolver(Map context)
{
return (ClassResolver) context.get(OgnlContext.CLASS_RESOLVER_CONTEXT_KEY);
}
/**
* Configures the type converter to use for a given context. This will be used
* to convert into / out of various java class types.
*
*
@param context
* The context to configure it for.
*
@param converter
* The converter to use.
*/
public static void setTypeConverter(Map context, TypeConverter converter)
{
context.put(OgnlContext.TYPE_CONVERTER_CONTEXT_KEY, converter);
}
/**
* Gets the currently configured {
@link TypeConverter} for the given context - if any.
*
*
@param context
* The context to get the converter from.
*
*
@return The converter - or null if none found.
*/
public static TypeConverter getTypeConverter(Map context)
{
return (TypeConverter) context.get(OgnlContext.TYPE_CONVERTER_CONTEXT_KEY);
}
/**
* Configures the specified context with a {
@link MemberAccess} instance for
* handling field/method protection levels.
*
*
@param context
* The context to configure.
*
@param memberAccess
* The access resolver to configure the context with.
*/
public static void setMemberAccess(Map context, MemberAccess memberAccess)
{
context.put(OgnlContext.MEMBER_ACCESS_CONTEXT_KEY, memberAccess);
}
/**
* Gets the currently stored {
@link MemberAccess} object for the given context - if any.
*
*
@param context
* The context to get the object from.
*
*
@return The configured {@link MemberAccess} instance in the specified context - or null if none found.
*/
public static MemberAccess getMemberAccess(Map context)
{
return (MemberAccess) context.get(OgnlContext.MEMBER_ACCESS_CONTEXT_KEY);
}
/**
* Sets the root object to use for all expressions in the given context - doesn‘t necessarily replace
* root object instances explicitly passed in to other expression resolving methods on this class.
*
*
@param context
* The context to store the root object in.
*
@param root
* The root object.
*/
public static void setRoot(Map context, Object root)
{
context.put(OgnlContext.ROOT_CONTEXT_KEY, root);
}
/**
* Gets the stored root object for the given context - if any.
*
*
@param context
* The context to get the root object from.
*
*
@return The root object - or null if none found.
*/
public static Object getRoot(Map context)
{
return context.get(OgnlContext.ROOT_CONTEXT_KEY);
}
/**
* Gets the last {
@link Evaluation} executed on the given context.
*
*
@param context
* The context to get the evaluation from.
*
*
@return The {@link Evaluation} - or null if none was found.
*/
public static Evaluation getLastEvaluation(Map context)
{
return (Evaluation) context.get(OgnlContext.LAST_EVALUATION_CONTEXT_KEY);
}
/**
* Evaluates the given OGNL expression tree to extract a value from the given root object. The
* default context is set for the given context and root via addDefaultContext().
*
*
@param tree
* the OGNL expression tree to evaluate, as returned by parseExpression()
*
@param context
* the naming context for the evaluation
*
@param root
* the root object for the OGNL expression
*
@return the result of evaluating the expression
*
@throws MethodFailedException
* if the expression called a method which failed
*
@throws NoSuchPropertyException
* if the expression referred to a nonexistent property
*
@throws InappropriateExpressionException
* if the expression can‘t be used in this context
*
@throws OgnlException
* if there is a pathological environmental problem
*/
public static Object getValue(Object tree, Map context, Object root)
throws OgnlException
{
return getValue(tree, context, root, null);
}
/**
* Evaluates the given OGNL expression tree to extract a value from the given root object. The
* default context is set for the given context and root via addDefaultContext().
*
*
@param tree
* the OGNL expression tree to evaluate, as returned by parseExpression()
*
@param context
* the naming context for the evaluation
*
@param root
* the root object for the OGNL expression
*
@param resultType
* the converted type of the resultant object, using the context‘s type converter
*
@return the result of evaluating the expression
*
@throws MethodFailedException
* if the expression called a method which failed
*
@throws NoSuchPropertyException
* if the expression referred to a nonexistent property
*
@throws InappropriateExpressionException
* if the expression can‘t be used in this context
*
@throws OgnlException
* if there is a pathological environmental problem
*/
public static Object getValue(Object tree, Map context, Object root, Class resultType)
throws OgnlException
{
Object result;
OgnlContext ognlContext
= (OgnlContext) addDefaultContext(root, context);
Node node
= (Node)tree;
if (node.getAccessor() != null)
result
= node.getAccessor().get(ognlContext, root);
else
result
= node.getValue(ognlContext, root);
if (resultType != null) {
result
= getTypeConverter(context).convertValue(context, root, null, null, result, resultType);
}
return result;
}
/**
* Gets the value represented by the given pre-compiled expression on the specified root
* object.
*
*
@param expression
* The pre-compiled expression, as found in {
@link Node#getAccessor()}.
*
@param context
* The ognl context.
*
@param root
* The object to retrieve the expression value from.
*
@return
* The value.
*/
public static Object getValue(ExpressionAccessor expression, OgnlContext context, Object root)
{
return expression.get(context, root);
}
/**
* Gets the value represented by the given pre-compiled expression on the specified root
* object.
*
*
@param expression
* The pre-compiled expression, as found in {
@link Node#getAccessor()}.
*
@param context
* The ognl context.
*
@param root
* The object to retrieve the expression value from.
*
@param resultType
* The desired object type that the return value should be converted to using the {
@link #getTypeConverter(java.util.Map)} }.
*
@return
* The value.
*/
public static Object getValue(ExpressionAccessor expression, OgnlContext context,
Object root, Class resultType)
{
return getTypeConverter(context).convertValue(context, root, null, null, expression.get(context, root), resultType);
}
/**
* Evaluates the given OGNL expression to extract a value from the given root object in a given
* context
*
*
@see #parseExpression(String)
*
@see #getValue(Object,Object)
*
@param expression
* the OGNL expression to be parsed
*
@param context
* the naming context for the evaluation
*
@param root
* the root object for the OGNL expression
*
@return the result of evaluating the expression
*
@throws MethodFailedException
* if the expression called a method which failed
*
@throws NoSuchPropertyException
* if the expression referred to a nonexistent property
*
@throws InappropriateExpressionException
* if the expression can‘t be used in this context
*
@throws OgnlException
* if there is a pathological environmental problem
*/
public static Object getValue(String expression, Map context, Object root)
throws OgnlException
{
return getValue(expression, context, root, null);
}
/**
* Evaluates the given OGNL expression to extract a value from the given root object in a given
* context
*
*
@see #parseExpression(String)
*
@see #getValue(Object,Object)
*
@param expression
* the OGNL expression to be parsed
*
@param context
* the naming context for the evaluation
*
@param root
* the root object for the OGNL expression
*
@param resultType
* the converted type of the resultant object, using the context‘s type converter
*
@return the result of evaluating the expression
*
@throws MethodFailedException
* if the expression called a method which failed
*
@throws NoSuchPropertyException
* if the expression referred to a nonexistent property
*
@throws InappropriateExpressionException
* if the expression can‘t be used in this context
*
@throws OgnlException
* if there is a pathological environmental problem
*/
public static Object getValue(String expression, Map context, Object root, Class resultType)
throws OgnlException
{
return getValue(parseExpression(expression), context, root, resultType);
}
/**
* Evaluates the given OGNL expression tree to extract a value from the given root object.
*
*
@param tree
* the OGNL expression tree to evaluate, as returned by parseExpression()
*
@param root
* the root object for the OGNL expression
*
@return the result of evaluating the expression
*
@throws MethodFailedException
* if the expression called a method which failed
*
@throws NoSuchPropertyException
* if the expression referred to a nonexistent property
*
@throws InappropriateExpressionException
* if the expression can‘t be used in this context
*
@throws OgnlException
* if there is a pathological environmental problem
*/
public static Object getValue(Object tree, Object root)
throws OgnlException
{
return getValue(tree, root, null);
}
/**
* Evaluates the given OGNL expression tree to extract a value from the given root object.
*
*
@param tree
* the OGNL expression tree to evaluate, as returned by parseExpression()
*
@param root
* the root object for the OGNL expression
*
@param resultType
* the converted type of the resultant object, using the context‘s type converter
*
@return the result of evaluating the expression
*
@throws MethodFailedException
* if the expression called a method which failed
*
@throws NoSuchPropertyException
* if the expression referred to a nonexistent property
*
@throws InappropriateExpressionException
* if the expression can‘t be used in this context
*
@throws OgnlException
* if there is a pathological environmental problem
*/
public static Object getValue(Object tree, Object root, Class resultType)
throws OgnlException
{
return getValue(tree, createDefaultContext(root), root, resultType);
}
/**
* Convenience method that combines calls to parseExpression and
* getValue.
*
*
@see #parseExpression(String)
*
@see #getValue(Object,Object)
*
@param expression
* the OGNL expression to be parsed
*
@param root
* the root object for the OGNL expression
*
@return the result of evaluating the expression
*
@throws ExpressionSyntaxException
* if the expression is malformed
*
@throws MethodFailedException
* if the expression called a method which failed
*
@throws NoSuchPropertyException
* if the expression referred to a nonexistent property
*
@throws InappropriateExpressionException
* if the expression can‘t be used in this context
*
@throws OgnlException
* if there is a pathological environmental problem
*/
public static Object getValue(String expression, Object root)
throws OgnlException
{
return getValue(expression, root, null);
}
/**
* Convenience method that combines calls to parseExpression and
* getValue.
*
*
@see #parseExpression(String)
*
@see #getValue(Object,Object)
*
@param expression
* the OGNL expression to be parsed
*
@param root
* the root object for the OGNL expression
*
@param resultType
* the converted type of the resultant object, using the context‘s type converter
*
@return the result of evaluating the expression
*
@throws ExpressionSyntaxException
* if the expression is malformed
*
@throws MethodFailedException
* if the expression called a method which failed
*
@throws NoSuchPropertyException
* if the expression referred to a nonexistent property
*
@throws InappropriateExpressionException
* if the expression can‘t be used in this context
*
@throws OgnlException
* if there is a pathological environmental problem
*/
public static Object getValue(String expression, Object root, Class resultType)
throws OgnlException
{
return getValue(parseExpression(expression), root, resultType);
}
/**
* Evaluates the given OGNL expression tree to insert a value into the object graph rooted at
* the given root object. The default context is set for the given context and root via addDefaultContext().
*
*
@param tree
* the OGNL expression tree to evaluate, as returned by parseExpression()
*
@param context
* the naming context for the evaluation
*
@param root
* the root object for the OGNL expression
*
@param value
* the value to insert into the object graph
*
@throws MethodFailedException
* if the expression called a method which failed
*
@throws NoSuchPropertyException
* if the expression referred to a nonexistent property
*
@throws InappropriateExpressionException
* if the expression can‘t be used in this context
*
@throws OgnlException
* if there is a pathological environmental problem
*/
public static void setValue(Object tree, Map context, Object root, Object value)
throws OgnlException
{
OgnlContext ognlContext
= (OgnlContext) addDefaultContext(root, context);
Node n
= (Node) tree;
if (n.getAccessor() != null) {
n.getAccessor().set(ognlContext, root, value);
return;
}
n.setValue(ognlContext, root, value);
}
/**
* Sets the value given using the pre-compiled expression on the specified root
* object.
*
*
@param expression
* The pre-compiled expression, as found in {
@link Node#getAccessor()}.
*
@param context
* The ognl context.
*
@param root
* The object to set the expression value on.
*
@param value
* The value to set.
*/
public static void setValue(ExpressionAccessor expression, OgnlContext context,
Object root, Object value)
{
expression.set(context, root, value);
}
/**
* Evaluates the given OGNL expression to insert a value into the object graph rooted at the
* given root object given the context.
*
*
@param expression
* the OGNL expression to be parsed
*
@param root
* the root object for the OGNL expression
*
@param context
* the naming context for the evaluation
*
@param value
* the value to insert into the object graph
*
@throws MethodFailedException
* if the expression called a method which failed
*
@throws NoSuchPropertyException
* if the expression referred to a nonexistent property
*
@throws InappropriateExpressionException
* if the expression can‘t be used in this context
*
@throws OgnlException
* if there is a pathological environmental problem
*/
public static void setValue(String expression, Map context, Object root, Object value)
throws OgnlException
{
setValue(parseExpression(expression), context, root, value);
}
/**
* Evaluates the given OGNL expression tree to insert a value into the object graph rooted at
* the given root object.
*
*
@param tree
* the OGNL expression tree to evaluate, as returned by parseExpression()
*
@param root
* the root object for the OGNL expression
*
@param value
* the value to insert into the object graph
*
@throws MethodFailedException
* if the expression called a method which failed
*
@throws NoSuchPropertyException
* if the expression referred to a nonexistent property
*
@throws InappropriateExpressionException
* if the expression can‘t be used in this context
*
@throws OgnlException
* if there is a pathological environmental problem
*/
public static void setValue(Object tree, Object root, Object value)
throws OgnlException
{
setValue(tree, createDefaultContext(root), root, value);
}
/**
* Convenience method that combines calls to parseExpression and
* setValue.
*
*
@see #parseExpression(String)
*
@see #setValue(Object,Object,Object)
*
@param expression
* the OGNL expression to be parsed
*
@param root
* the root object for the OGNL expression
*
@param value
* the value to insert into the object graph
*
@throws ExpressionSyntaxException
* if the expression is malformed
*
@throws MethodFailedException
* if the expression called a method which failed
*
@throws NoSuchPropertyException
* if the expression referred to a nonexistent property
*
@throws InappropriateExpressionException
* if the expression can‘t be used in this context
*
@throws OgnlException
* if there is a pathological environmental problem
*/
public static void setValue(String expression, Object root, Object value)
throws OgnlException
{
setValue(parseExpression(expression), root, value);
}
/**
* Checks if the specified {
@link Node} instance represents a constant
* expression.
*
*
@param tree
* The {
@link Node} to check.
*
@param context
* The context to use.
*
*
@return True if the node is a constant - false otherwise.
*
@throws OgnlException If an error occurs checking the expression.
*/
public static boolean isConstant(Object tree, Map context)
throws OgnlException
{
return ((SimpleNode) tree).isConstant((OgnlContext) addDefaultContext(null, context));
}
/**
* Checks if the specified expression represents a constant expression.
*
*
@param expression
* The expression to check.
*
@param context
* The context to use.
*
*
@return True if the node is a constant - false otherwise.
*
@throws OgnlException If an error occurs checking the expression.
*/
public static boolean isConstant(String expression, Map context)
throws OgnlException
{
return isConstant(parseExpression(expression), context);
}
/**
* Same as {
@link #isConstant(Object, java.util.Map)} - only the {@link Map} context
* is created for you.
*
*
@param tree
* The {
@link Node} to check.
*
*
@return True if the node represents a constant expression - false otherwise.
*
@throws OgnlException If an exception occurs.
*/
public static boolean isConstant(Object tree)
throws OgnlException
{
return isConstant(tree, createDefaultContext(null));
}
/**
* Same as {
@link #isConstant(String, java.util.Map)} - only the {@link Map}
* instance is created for you.
*
*
@param expression
* The expression to check.
*
*
@return True if the expression represents a constant - false otherwise.
*
@throws OgnlException If an exception occurs.
*/
public static boolean isConstant(String expression)
throws OgnlException
{
return isConstant(parseExpression(expression), createDefaultContext(null));
}
public static boolean isSimpleProperty(Object tree, Map context)
throws OgnlException
{
return ((SimpleNode) tree).isSimpleProperty((OgnlContext) addDefaultContext(null, context));
}
public static boolean isSimpleProperty(String expression, Map context)
throws OgnlException
{
return isSimpleProperty(parseExpression(expression), context);
}
public static boolean isSimpleProperty(Object tree)
throws OgnlException
{
return isSimpleProperty(tree, createDefaultContext(null));
}
public static boolean isSimpleProperty(String expression)
throws OgnlException
{
return isSimpleProperty(parseExpression(expression), createDefaultContext(null));
}
public static boolean isSimpleNavigationChain(Object tree, Map context)
throws OgnlException
{
return ((SimpleNode) tree).isSimpleNavigationChain((OgnlContext) addDefaultContext(null, context));
}
public static boolean isSimpleNavigationChain(String expression, Map context)
throws OgnlException
{
return isSimpleNavigationChain(parseExpression(expression), context);
}
public static boolean isSimpleNavigationChain(Object tree)
throws OgnlException
{
return isSimpleNavigationChain(tree, createDefaultContext(null));
}
public static boolean isSimpleNavigationChain(String expression)
throws OgnlException
{
return isSimpleNavigationChain(parseExpression(expression), createDefaultContext(null));
}
/** You can‘t make one of these. */
private Ognl()
{
}
}

 

Ognl对象图导航语言 源码,布布扣,bubuko.com


推荐阅读
  • 网络流24题——试题库问题
    题目描述:假设一个试题库中有n道试题。每道试题都标明了所属类别。同一道题可能有多个类别属性。现要从题库中抽取m道题组成试卷。并要求试卷包含指定类型的试题。试设计一个满足要求的组卷算 ... [详细]
  • 为何Compose与Swarm之后仍有Kubernetes的诞生?
    探讨在已有Compose和Swarm的情况下,Kubernetes是如何以其独特的设计理念和技术优势脱颖而出,成为容器编排领域的领航者。 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • publicclassBindActionextendsActionSupport{privateStringproString;privateStringcitString; ... [详细]
  • 我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ... [详细]
  • 本文介绍了如何通过C#语言调用动态链接库(DLL)中的函数来实现IC卡的基本操作,包括初始化设备、设置密码模式、获取设备状态等,并详细展示了将TextBox中的数据写入IC卡的具体实现方法。 ... [详细]
  • 本文详细介绍了C++中的构造函数,包括其定义、特点以及如何通过构造函数进行对象的初始化。此外,还探讨了转换构造函数的概念及其在不同情境下的应用,以及如何避免不必要的隐式类型转换。 ... [详细]
  • 数据类型--char一、char1.1char占用2个字节char取值范围:【0~65535】char采用unicode编码方式char类型的字面量用单引号括起来char可以存储一 ... [详细]
  • 本文将从基础概念入手,详细探讨SpringMVC框架中DispatcherServlet如何通过HandlerMapping进行请求分发,以及其背后的源码实现细节。 ... [详细]
  • 利用无代码平台实现高效业务应用开发
    随着市场环境的变化加速,全球企业都在探索更为敏捷的应用开发模式,以便快速响应新兴的商业机遇。然而,传统的软件开发方式不仅成本高昂,而且耗时较长,这往往导致IT与业务部门之间的合作障碍,进而影响项目的成功。本文将探讨如何通过无代码开发平台解决这些问题。 ... [详细]
  • 本文介绍了如何通过安装 sqlacodegen 和 pymysql 来根据现有的 MySQL 数据库自动生成 ORM 的模型文件(model.py)。此方法适用于需要快速搭建项目模型层的情况。 ... [详细]
  • 回顾两年前春节期间的一个个人项目,该项目原本计划参加竞赛,但最终作为练习项目完成。独自完成了从编码到UI设计的全部工作,尽管代码量不大,但仍有一定的参考价值。本文将详细介绍该项目的背景、功能及技术实现。 ... [详细]
  • 如何在PHP中安装Xdebug扩展
    本文介绍了如何从PECL下载并编译安装Xdebug扩展,以及如何配置PHP和PHPStorm以启用调试功能。 ... [详细]
author-avatar
空白画叶子
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有