ELResolver

public abstract class javax.el
ELResolver



Show All Login
Java EE 5 SDK
  

Hide
zh_cn
能够自定义 EL 表达式求值的变量和属性解析行为。
对一个表达式进行求值时,参考与 ELContext 关联的 ELResolver,以对表达式的第一个变量进行初始解析。遇到 .[] 操作符时也要参考它,但方法表达式中最后一个这样的操作符除外,因为在这种情况下解析规则是固定编码的。
例如,在 EL 表达式 ${employee.lastName} 中,ELResolver 确定 employee 引用的对象,以及获取该对象 lastName 属性的含义。
此类中的大多数方法都接受 baseproperty 参数。如果是变量解析(例如,确定 ${employee.lastName}employee 引用的内容),则 base 参数将为 nullproperty 参数将总是为 String 类型。这种情况下,如果 property 不是 String,则 ELResolver 的行为未定义。
如果是属性解析,则 base 参数标识 base 对象,property 对象标识 base 上的属性。例如,在表达式 ${employee.lastName} 中,baseemployee 变量解析的结果,property 是字符串 "lastName"。在表达式 ${y[x]} 中,basey 变量解析的结果,propertyx 变量解析的结果。
尽管只有一个 ELResolverELContext 关联,但对于任何给定的变量或属性解析,通常可以使用多个解析器。ELResolver 使用 CompositeELResolver 连接到一起,以定义丰富语义来计算表达式。
对于 #getValue#getType#setValue#isReadOnly 方法,ELResolver 不负责解析所有可能的 (base, property) 对。实际上,大部分解析器将仅能处理一种类型的 base。要指示解析器成功地解析特定 (base, property) 对,它必须将 ELContextpropertyResolved 属性设置为 true。如果它无法处理给定对,则必须保持此属性不变。如果 propertyResolvedfalse,则调用者必须忽略该方法的返回值。
设计 #getFeatureDescriptors#getCommonPropertyType 方法的主要目的是支持设计时工具,但它们也必须在运行时处理调用。可以使用 java.beans.Beans#isDesignTime 方法确定是否在设计时(或运行时)参考了解析器。
sinceJSP 2.1
See also javax.el.CompositeELResolver, getELResolver

Fields
final public static String TYPE
zh_cn
FeatureDescriptor 中指定变量或属性的运行时类型的指定属性的属性名称。
final public static String RESOLVABLE_AT_DESIGN_TIME
zh_cn
FeatureDescriptor 中指定是否可以在运行时解析变量或属性的指定属性的属性名称。

Constructors
public ELResolver()

Properties
abstract public Class<T> getCommonPropertyType(ELContext context, Object base) Hide
zh_cn
在给定 base 对象的情况下,返回对于 property 参数此解析器可以接受的最一般类型。此方法可以用于自动完成的辅助工具。
此自动完成辅助工具还提供一种表示解析器接受原始值(如数组中的整数索引)的方式。例如,ArrayELResolver 将接受任何 int 作为 property,因此返回值将为 Integer.class
context
zh_cn
此计算的上下文。
base
zh_cn
要返回最一般属性类型的 base 对象;或者为 null,表示枚举此解析器可以计算的顶级变量集合。
return
zh_cn
如果此 ELResolver 不了解如何处理给定的 base 对象,则返回 null;否则,如果接受任何 property 类型,则返回 Object.class;其他情况下,返回给定 base 可接受的最一般的 property 类型。
abstract public java.util.Iterator<E> getFeatureDescriptors(ELContext context, Object base) Hide
zh_cn
返回可以针对给定 base 对象进行解析的变量或属性集的有关信息。此方法可以用于自动完成的辅助工具。
如果 base 参数为 null,则解析器必须枚举它可以解析的顶级变量列表。
返回的 Iterator 必须包含 0 个或多个 java.beans.FeatureDescriptor 实例(无固定顺序)。如果是基本类型(如 int),则必须返回值 null。这样可以防止对所有可能的原始值进行无用迭代。返回值为 null 表示此解析器没有处理给定的 base 对象,或者结果太复杂而无法用此方法表示,此时应该使用 #getCommonPropertyType 方法。
每个 FeatureDescriptor 将包含有关单个变量或属性的信息。除了标准属性之外,FeatureDescriptor 必须拥有两个指定属性(通过 setValue 方法设置):
  • #TYPE - 此指定属性的值必须是 java.lang.Class 的实例,并且必须指定变量或属性的运行时类型。
  • #RESOLVABLE_AT_DESIGN_TIME - 此指定属性的值必须是 java.lang.Boolean 的实例,并且必须指出在设计时尝试解析此属性是否安全。例如,如果 ELResolver 需要访问仅在运行时可用的资源并且没有提供可接受的模拟值,则尝试在设计时解析是不安全的。
调用者应该注意到返回的 Iterator 可能迭代非常大甚至无限大的属性集。调用者应该注意不要陷入无限循环。
这是一个最佳列表。并非所有 ELResolver 都将返回完全精确的结果,但它们都必须可以在设计时和运行时调用(即无论 Beans.isDesignTime() 是否返回 true)且不会引起错误。
ELContextpropertyResolved 属性与此方法无关。如果是复合解析器,则所有 ELResolver 的结果将串联在一起。
context
zh_cn
此计算的上下文。
base
zh_cn
要枚举有效属性集合的 base 对象;或者为 null,表示枚举此解析器可以计算的顶级变量集合。
return
zh_cn
包含 0 个或多个(可能无限多个)FeatureDescriptor 对象的 Iterator;如果此解析器不处理给定的 base 对象,或者结果太复杂而无法用此方法表示,则返回 null
See also java.beans.FeatureDescriptor
abstract public boolean isReadOnly(ELContext context, Object base, Object property) Hide
zh_cn
对于给定的 baseproperty,尝试确定调用 #setValue 是否将总是失败。
如果此解析器处理给定的 (base, property) 对,则在返回前,ELContext 对象的 propertyResolved 属性必须设置为 true。如果调用此方法后此属性不为 true,则调用者应该忽略返回值。
context
zh_cn
此计算的上下文。
base
zh_cn
将分析属性值的 base 对象;或者为 null,表示分析顶级变量。
property
zh_cn
要返回只读状态的属性或变量。
return
zh_cn
如果 ELContextpropertyResolved 属性被设置为 true,则在属性为只读的情况下返回 true,在非只读的情况下返回 false;其他情况未定义。
ThrowsNullPointerException:
zh_cn
如果 context 为 null
ThrowsPropertyNotFoundException:
zh_cn
如果此 ELResolver 处理了给定的 (base, property) 对,但指定变量或属性不存在。
ThrowsELException:
zh_cn
如果执行属性或变量解析时抛出异常。抛出的异常必须作为此异常的 cause 属性包含(如果可用)。
abstract public Class<T> getType(ELContext context, Object base, Object property) Hide
zh_cn
对于给定的 baseproperty,尝试标识最一般的对象类型,该类型对于将来调用 #setValue 方法时作为 value 参数传递的对象而言是可接受的。
如果此解析器处理给定的 (base, property) 对,则在返回前,ELContext 对象的 propertyResolved 属性必须设置为 true。如果调用此方法后此属性不为 true,则调用者应该忽略返回值。
这并非总是与 getValue().getClass() 相同。例如,如果是 ArrayELResolver,则 getType 方法将返回数组的元素类型,它可能是当前指定数组元素中的实际元素类型的超类。
context
zh_cn
此计算的上下文。
base
zh_cn
将分析属性值的 base 对象;或者为 null,表示分析顶级变量。
property
zh_cn
要返回可接受类型的属性或变量。
return
zh_cn
如果 ELContextpropertyResolved 属性设置为 true,则返回最一般的可接受类型;其他情况未定义。
ThrowsNullPointerException:
zh_cn
如果 context 为 null
ThrowsPropertyNotFoundException:
zh_cn
如果此 ELResolver 处理了给定的 (base, property) 对,但指定变量或属性不存在或不可读。
ThrowsELException:
zh_cn
如果执行属性或变量解析时抛出异常。抛出的异常必须作为此异常的 cause 属性包含(如果可用)。
abstract public void setValue(ELContext context, Object base, Object property, Object value) Hide
zh_cn
尝试在给定的 base 对象上设置给定的 property 对象的值。
如果此解析器处理给定的 (base, property) 对,则在返回前,ELContext 对象的 propertyResolved 属性必须设置为 true。如果调用此方法后此属性不为 true,则调用者可以放心地假定没有设置任何值。
context
zh_cn
此计算的上下文。
base
zh_cn
将设置属性值的 base 对象;或者为 null,表示设置顶级变量。
property
zh_cn
要设置的属性或变量。
value
zh_cn
用于设置属性或变量的值。
ThrowsNullPointerException:
zh_cn
如果 context 为 null
ThrowsPropertyNotFoundException:
zh_cn
如果此 ELResolver 处理了给定的 (base, property) 对,但指定变量或属性不存在。
ThrowsPropertyNotWritableException:
zh_cn
如果此 ELResolver 处理了给定的 (base, property) 对,但指定的变量或属性不可写。
ThrowsELException:
zh_cn
如果尝试设置属性或变量时抛出异常。抛出的异常必须作为此异常的 cause 属性包含(如果可用)。
abstract public Object getValue(ELContext context, Object base, Object property) Hide
zh_cn
尝试在给定的 base 对象上解析给定的 property 对象。
如果此解析器处理给定的 (base, property) 对,则在返回前,ELContext 对象的 propertyResolved 属性必须设置为 true。如果调用此方法后此属性不为 true,则调用者应该忽略返回值。
context
zh_cn
此计算的上下文。
base
zh_cn
将返回属性值的 base 对象;或者为 null,表示解析顶级变量。
property
zh_cn
要解析的属性或变量。
return
zh_cn
如果 ELContextpropertyResolved 属性设置为 true,则返回变量或属性解析的结果;其他情况未定义。
ThrowsNullPointerException:
zh_cn
如果 context 为 null
ThrowsPropertyNotFoundException:
zh_cn
如果此 ELResolver 处理了给定的 (base, property) 对,但指定变量或属性不存在或不可读。
ThrowsELException:
zh_cn
如果执行属性或变量解析时抛出异常。抛出的异常必须作为此异常的 cause 属性包含(如果可用)。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章