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 屬性包含(如果可用)。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章