public abstract class ELResolver extends ObjectSE
式の評価中に、ELContext
に関連付けられた ELResolver
が参照され、式の最初の変数の初期解決が行われます。また、.
または []
オペレーターが検出されたときにも参照されます。
例: Jakarta Expression Language 式 ${employee.lastName}
で、ELResolver
は employee
が参照するオブジェクトと、そのオブジェクトの lastName
プロパティを取得することの意味を決定します。
このクラスのほとんどのメソッドは、base
および property
パラメーターを受け入れます。可変解決の場合(employee
が ${employee.lastName}
で何を参照するかを決定するなど)、base
パラメーターは null
になり、property
パラメーターは常に型 String
になります。この場合、property
が String
ではない場合、ELResolver
の動作は未定義です。
プロパティ解決の場合、base
パラメーターはベースオブジェクトを識別し、property
オブジェクトはそのベースのプロパティを識別します。例: ${employee.lastName}
式では、base
は employee
の変数解決の結果であり、property
は文字列 "lastName"
です。式 ${y[x]}
で、base
は y
の可変解決の結果であり、property
は x
の可変解決の結果です。
メソッド呼び出し解決の場合、base
パラメーターはベースオブジェクトを識別し、method
パラメーターはそのベースのメソッドを識別します。メソッドがオーバーロードされている場合、 paramTypes
パラメーターをオプションで使用してメソッドを識別できます。params
パラメーターは、メソッド呼び出しのパラメーターであり、paramTypes
パラメーターが指定されていないときにオーバーロードされたメソッドを解決するためにも使用できます。
型変換解決の場合、obj
パラメーターはソースオブジェクトを識別し、targetType
パラメーターはソースから変換先のターゲット型を識別します。
ELContext
に関連付けられているのは 1 つの ELResolver
だけですが、通常、特定の変数またはプロパティの解決のために考慮される複数のリゾルバーがあります。ELResolver
は CompositeELResolver
を使用して結合され、式を評価するための豊富なセマンティクスを定義します。
getValue(javax.el.ELContext, java.lang.Object, java.lang.Object)
、getType(javax.el.ELContext, java.lang.Object, java.lang.Object)
、setValue(javax.el.ELContext, java.lang.Object, java.lang.Object, java.lang.Object)
、isReadOnly(javax.el.ELContext, java.lang.Object, java.lang.Object)
メソッドの場合、ELResolver
はすべての可能な(ベース、プロパティ)ペアの解決を担当しません。実際、ほとんどのリゾルバーは単一型の base
のみを処理します。リゾルバーが特定の(ベース、プロパティ)ペアを正常に解決したことを示すには、ELContext
の propertyResolved
プロパティを true
に設定する必要があります。指定されたペアを処理できなかった場合は、このプロパティをそのままにする必要があります。propertyResolved
が false
の場合、呼び出し元はメソッドの戻り値を無視する必要があります。
同様に、convertToType(javax.el.ELContext, java.lang.Object, java.lang.Class<?>)
メソッドの場合、ELResolver
は propertyResolved
を true
に設定して、オブジェクトがターゲット型への変換を処理することを示す必要があります。
getFeatureDescriptors(javax.el.ELContext, java.lang.Object)
および getCommonPropertyType(javax.el.ELContext, java.lang.Object)
メソッドは、主に設計時のツールサポート用に設計されていますが、実行時の呼び出しも処理する必要があります。Beans.isDesignTime()
SE メソッドを使用して、設計時または実行時にリゾルバーが参照されているかどうかを判断できます。
CompositeELResolver
, ELContext.getELResolver()
修飾子と型 | フィールドと説明 |
---|---|
static StringSE | RESOLVABLE_AT_DESIGN_TIME 変数またはプロパティを実行時に解決できるかどうかを指定する FeatureDescriptor の名前付き属性の属性名。 |
static StringSE | TYPE 変数またはプロパティのランタイム型を指定する FeatureDescriptor の名前付き属性の属性名。 |
コンストラクターと説明 |
---|
ELResolver() |
修飾子と型 | メソッドと説明 |
---|---|
ObjectSE | convertToType(ELContext context, ObjectSE obj, ClassSE<?> targetType) オブジェクトを特定の型に変換します。 |
abstract ClassSE<?> | getCommonPropertyType(ELContext context, ObjectSE base) base オブジェクトを指定して、このリゾルバーが property 引数に対して受け入れる最も一般的な型を返します。 |
abstract IteratorSE<FeatureDescriptorSE> | getFeatureDescriptors(ELContext context, ObjectSE base) 指定された base オブジェクトに対して解決できる変数またはプロパティのセットに関する情報を返します。 |
abstract ClassSE<?> | getType(ELContext context, ObjectSE base, ObjectSE property) 指定された base および property について、setValue(javax.el.ELContext, java.lang.Object, java.lang.Object, java.lang.Object) メソッドへの将来の呼び出しで value パラメーターとして渡されるオブジェクトに受け入れられる最も一般的な型を識別しようとします。 |
abstract ObjectSE | getValue(ELContext context, ObjectSE base, ObjectSE property) 指定された base オブジェクトで指定された property オブジェクトを解決しようとします。 |
ObjectSE | invoke(ELContext context, ObjectSE base, ObjectSE method, ClassSE<?>[] paramTypes, ObjectSE[] params) 指定された base オブジェクトで指定された method を解決して呼び出すことを試みます。 |
abstract boolean | isReadOnly(ELContext context, ObjectSE base, ObjectSE property) 特定の base および property について、setValue(javax.el.ELContext, java.lang.Object, java.lang.Object, java.lang.Object) の呼び出しが常に失敗するかどうかを判断しようとします。 |
abstract void | setValue(ELContext context, ObjectSE base, ObjectSE property, ObjectSE value) 指定された base オブジェクトに指定された property オブジェクトの値を設定しようとします。 |
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
public static final StringSE TYPE
FeatureDescriptor
の名前付き属性の属性名。public abstract ObjectSE getValue(ELContext context, ObjectSE base, ObjectSE property)
base
オブジェクトで指定された property
オブジェクトを解決しようとします。 このリゾルバーが指定された(ベース、プロパティ)ペアを処理する場合、戻る前に、リゾルバーによって ELContext
オブジェクトの propertyResolved
プロパティを true
に設定する必要があります。このメソッドが呼び出された後、このプロパティが true
でない場合、呼び出し元は戻り値を無視する必要があります。
context
- この評価のコンテキスト。base
- プロパティ値が返されるベースオブジェクト、またはトップレベル変数を解決する null
。property
- 解決するプロパティまたは変数。ELContext
の propertyResolved
プロパティが true
に設定されている場合、変数またはプロパティ解決の結果。それ以外は未定義。NullPointerExceptionSE
- コンテキストが null
の場合 PropertyNotFoundException
- 指定された(ベース、プロパティ)のペアがこの ELResolver
によって処理されましたが、指定された変数またはプロパティが存在しないか、読み取りできない場合。ELException
- プロパティまたは変数の解決の実行中に例外がスローされた場合。スローされた例外は、可能であれば、この例外の原因プロパティとして含める必要があります。public ObjectSE invoke(ELContext context, ObjectSE base, ObjectSE method, ClassSE<?>[] paramTypes, ObjectSE[] params)
base
オブジェクトで指定された method
を解決して呼び出すことを試みます。 このリゾルバーが指定された(ベース、メソッド)ペアを処理する場合、戻る前に、リゾルバーによって ELContext
オブジェクトの propertyResolved
プロパティを true
に設定する必要があります。このメソッドが呼び出された後、このプロパティが true
でない場合、呼び出し元は戻り値を無視する必要があります。
ELResolver を継承する既存のクラスが機能し続けることができるように、null を返すデフォルトの実装が提供されています。
context
- この評価のコンテキスト。base
- メソッドを呼び出す Beanmethod
- 呼び出すメソッドの単純な名前。String
に強制変換されます。paramTypes
- メソッドの仮パラメーター型を宣言された順序で識別する Class オブジェクトの配列。メソッドにパラメーターがない場合は、空の配列を使用します。null
にすることができます。その場合、メソッドの仮パラメーターの型は不明であると見なされます。params
- メソッドに渡すパラメーター。パラメーターがない場合は null
。void
戻り値の型がある場合は null
)。MethodNotFoundException
- 適切な方法が見つからない場合。ELException
- (ベース、メソッド)解決の実行中に例外がスローされた場合スローされた例外は、可能であれば、この例外の原因プロパティとして含める必要があります。スローされた例外が InvocationTargetException
の場合、その cause
を抽出し、それを ELException
コンストラクターに渡します。public abstract ClassSE<?> getType(ELContext context, ObjectSE base, ObjectSE property)
base
および property
について、setValue(javax.el.ELContext, java.lang.Object, java.lang.Object, java.lang.Object)
メソッドへの将来の呼び出しで value
パラメーターとして渡されるオブジェクトに受け入れられる最も一般的な型を識別しようとします。 このリゾルバーが指定された(ベース、プロパティ)ペアを処理する場合、戻る前に、リゾルバーによって ELContext
オブジェクトの propertyResolved
プロパティを true
に設定する必要があります。このメソッドが呼び出された後、このプロパティが true
でない場合、呼び出し元は戻り値を無視する必要があります。
これは、常に getValue().getClass()
と同じではありません。例: ArrayELResolver
の場合、getType
メソッドは配列のエレメント型を返します。これは、指定された配列エレメントに現在ある実際のエレメントの型のスーパークラスである可能性があります。
context
- この評価のコンテキスト。base
- プロパティ値を分析するベースオブジェクト、またはトップレベル変数を分析する null
。property
- 受け入れ可能な型を返すプロパティまたは変数。ELContext
の propertyResolved
プロパティが true
に設定されている場合、最も一般的な受け入れ可能な型。それ以外は未定義。PropertyNotFoundException
- 指定された(ベース、プロパティ)のペアがこの ELResolver
によって処理されましたが、指定された変数またはプロパティが存在しないか、読み取りできない場合。ELException
- プロパティまたは変数の解決の実行中に例外がスローされた場合。スローされた例外は、可能であれば、この例外の原因プロパティとして含める必要があります。public abstract void setValue(ELContext context, ObjectSE base, ObjectSE property, ObjectSE value)
base
オブジェクトに指定された property
オブジェクトの値を設定しようとします。 このリゾルバーが指定された(ベース、プロパティ)ペアを処理する場合、戻る前に、リゾルバーによって ELContext
オブジェクトの propertyResolved
プロパティを true
に設定する必要があります。このメソッドが呼び出された後、このプロパティが true
でない場合、呼び出し元は値が設定されていないと安全に想定できます。
context
- この評価のコンテキスト。base
- プロパティ値を設定する基本オブジェクト、またはトップレベル変数を設定する null
。property
- 設定するプロパティまたは変数。value
- プロパティまたは変数に設定する値。NullPointerExceptionSE
- コンテキストが null
の場合 PropertyNotFoundException
- 指定された(ベース、プロパティ)ペアがこの ELResolver
によって処理されたが、指定された変数またはプロパティが存在しない場合 PropertyNotWritableException
- 指定された(ベース、プロパティ)ペアがこの ELResolver
で処理されているが、指定された変数またはプロパティが書き込み可能でない場合 ELException
- プロパティまたは変数を設定しようとしたときに例外がスローされた場合。スローされた例外は、可能であれば、この例外の原因プロパティとして含める必要があります。public abstract boolean isReadOnly(ELContext context, ObjectSE base, ObjectSE property)
base
および property
について、setValue(javax.el.ELContext, java.lang.Object, java.lang.Object, java.lang.Object)
の呼び出しが常に失敗するかどうかを判断しようとします。 このリゾルバーが指定された(ベース、プロパティ)ペアを処理する場合、戻る前に、リゾルバーによって ELContext
オブジェクトの propertyResolved
プロパティを true
に設定する必要があります。このメソッドが呼び出された後、このプロパティが true
でない場合、呼び出し元は戻り値を無視する必要があります。
context
- この評価のコンテキスト。base
- プロパティ値を分析するベースオブジェクト、またはトップレベル変数を分析する null
。property
- 読み取り専用ステータスを返すプロパティまたは変数。ELContext
の propertyResolved
プロパティが true
に設定されている場合、プロパティが読み取り専用の場合は true
、そうでない場合は false
。それ以外は未定義。NullPointerExceptionSE
- コンテキストが null
の場合 PropertyNotFoundException
- 指定された(ベース、プロパティ)ペアがこの ELResolver
によって処理されたが、指定された変数またはプロパティが存在しない場合 ELException
- プロパティまたは変数の解決の実行中に例外がスローされた場合。スローされた例外は、可能であれば、この例外の原因プロパティとして含める必要があります。public abstract IteratorSE<FeatureDescriptorSE> getFeatureDescriptors(ELContext context, ObjectSE base)
base
オブジェクトに対して解決できる変数またはプロパティのセットに関する情報を返します。この方法の 1 つの用途は、ツールが自動補完を支援することです。base
パラメーターが null
の場合、リゾルバーは解決できるトップレベルの変数のリストを列挙する必要があります。
返される Iterator
には、FeatureDescriptor
SE のゼロ個以上のインスタンスが含まれている必要があり、順序は保証されていません。int
などのプリミティブ型の場合、値 null
を返す必要があります。これは、考えられるすべてのプリミティブ値による無駄な反復を防ぐためです。null
の戻り値は、このリゾルバーが指定された base
オブジェクトを処理しないか、結果が複雑すぎてこのメソッドで表現できないことを示し、代わりに getCommonPropertyType(javax.el.ELContext, java.lang.Object)
メソッドを使用する必要があります。
各 FeatureDescriptor
には、単一の変数またはプロパティに関する情報が含まれます。標準プロパティに加えて、FeatureDescriptor
には(setValue
メソッドで設定された)2 つの名前付き属性が必要です。
TYPE
- この名前付き属性の値は、java.lang.Class
のインスタンスであり、変数またはプロパティのランタイム型を指定する必要があります。RESOLVABLE_AT_DESIGN_TIME
- この名前付き属性の値は java.lang.Boolean
のインスタンスである必要があり、設計時にこのプロパティを解決しようとして安全かどうかを示します。たとえば、ELResolver
が実行時にのみ利用可能なリソースにアクセスする必要があり、許容可能なシミュレーション値を提供できない場合、設計時に解決を試みるのは安全ではない可能性があります。 呼び出し側は、返された Iterator
が非常に大きい、または無限に大きいプロパティのセットを繰り返し処理する可能性があることを認識しておく必要があります。呼び出し元は、無限ループに陥らないように注意する必要があります。
これは「ベストエフォート」リストです。すべての ELResolver
が完全に正確な結果を返すわけではありませんが、エラーを引き起こすことなく、設計時と実行時の両方で(つまり、Beans.isDesignTime()
が true
を返すかどうかにかかわらず)すべて呼び出し可能でなければなりません。
ELContext
の propertyResolved
プロパティは、このメソッドには関係ありません。複合リゾルバーの場合、すべての ELResolver
の結果が連結されます。
context
- この評価のコンテキスト。base
- 有効なプロパティのセットが列挙される基本オブジェクト、またはこのリゾルバーが評価できるトップレベルの変数のセットを列挙する null
。FeatureDescriptor
オブジェクトを 0 個以上(場合によっては無限に多く)含む Iterator
、またはこのリゾルバーが与えられた base
オブジェクトを処理できない場合や、このメソッドで表現するには結果が複雑すぎる場合は null
。FeatureDescriptor
SEpublic abstract ClassSE<?> getCommonPropertyType(ELContext context, ObjectSE base)
base
オブジェクトが指定された場合、このリゾルバーが property
引数に対して受け入れる最も一般的な型を返します。この方法の 1 つの用途は、ツールが自動補完を支援することです。 これは、ツールが自動補完を支援し、リゾルバーが配列への整数インデックスなどのプリミティブ値を受け入れることを表現する方法も提供します。例: ArrayELResolver
は int
を property
として受け入れるため、戻り値は Integer.class
になります。
context
- この評価のコンテキスト。base
- 最も一般的なプロパティ型を返す基本オブジェクト、またはこのリゾルバーが評価できるトップレベルの変数のセットを列挙する null
。ELResolver
が指定された base
オブジェクトの処理方法を認識していない場合は null
。それ以外の型の property
が受け入れられる場合は Object.class
。それ以外の場合は、指定された base
で受け入れられる最も一般的な property
型。public ObjectSE convertToType(ELContext context, ObjectSE obj, ClassSE<?> targetType)
変換中にエラーが発生すると、ELException
がスローされます。
context
- この評価のコンテキスト。obj
- 変換するオブジェクト。targetType
- 変換のターゲット型。targetType
に変換されたオブジェクト ELException
- エラーが発生した場合にスローされます。Copyright © 2019 Eclipse Foundation.
Use is subject to license terms.