クラス ELResolver
- java.lang.ObjectSE
-
- jakarta.el.ELResolver
- 既知の直属サブクラス
ArrayELResolver
、BeanELResolver
、BeanNameELResolver
、CompositeELResolver
、ImplicitObjectELResolver
、ImportELResolver
、ListELResolver
、MapELResolver
、NotFoundELResolver
、ResourceBundleELResolver
、ScopedAttributeELResolver
、StaticFieldELResolver
、TypeConverter
public abstract class ELResolver extends ObjectSE
Jakarta Expression Language 式評価の変数、プロパティ、メソッド呼び出し、型変換解決動作のカスタマイズを有効にします。式の評価中に、
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(jakarta.el.ELContext, java.lang.Object, java.lang.Object)
、getType(jakarta.el.ELContext, java.lang.Object, java.lang.Object)
、setValue(jakarta.el.ELContext, java.lang.Object, java.lang.Object, java.lang.Object)
、isReadOnly(jakarta.el.ELContext, java.lang.Object, java.lang.Object)
メソッドの場合、ELResolver
はすべての可能な(ベース、プロパティ)ペアの解決を担当しません。実際、ほとんどのリゾルバーは単一型のbase
のみを処理します。リゾルバーが特定の(ベース、プロパティ)ペアを正常に解決したことを示すには、ELContext
のpropertyResolved
プロパティをtrue
に設定する必要があります。指定されたペアを処理できなかった場合は、このプロパティをそのままにする必要があります。propertyResolved
がfalse
の場合、呼び出し元はメソッドの戻り値を無視する必要があります。同様に、
convertToType(jakarta.el.ELContext, java.lang.Object, java.lang.Class<T>)
メソッドの場合、ELResolver
はpropertyResolved
をtrue
に設定して、オブジェクトがターゲット型への変換を処理することを示す必要があります。getFeatureDescriptors(jakarta.el.ELContext, java.lang.Object)
およびgetCommonPropertyType(jakarta.el.ELContext, java.lang.Object)
メソッドは、主に設計時のツールサポート用に設計されていますが、実行時の呼び出しも処理する必要があります。Beans.isDesignTime()
メソッドを使用して、設計時または実行時にリゾルバーが参照されているかどうかを判断できます。- 導入:
- Jakarta Server Pages 2.1
- 関連事項:
CompositeELResolver
,ELContext.getELResolver()
フィールドサマリー
フィールド 修飾子と型 フィールド 説明 static StringSE
RESOLVABLE_AT_DESIGN_TIME
変数またはプロパティを実行時に解決できるかどうかを指定するFeatureDescriptor
の名前付き属性の属性名。static StringSE
TYPE
変数またはプロパティのランタイム型を指定するFeatureDescriptor
の名前付き属性の属性名。
コンストラクターのサマリー
コンストラクター コンストラクター 説明 ELResolver()
メソッドのサマリー
すべてのメソッド インスタンスメソッド 抽象メソッド 具象メソッド 非推奨のメソッド 修飾子と型 メソッド 説明 <T> T
convertToType(ELContext context, ObjectSE obj, ClassSE<T> targetType)
オブジェクトを特定の型に変換します。abstract ClassSE<?>
getCommonPropertyType(ELContext context, ObjectSE base)
base
オブジェクトを指定して、このリゾルバーがproperty
引数に対して受け入れる最も一般的な型を返します。IteratorSE<FeatureDescriptorSE>
getFeatureDescriptors(ELContext context, ObjectSE base)
非推奨、削除予定: この API 要素は、将来のバージョンで削除される可能性があります。このメソッドは、EL 6.0 では代替なしで削除されますabstract ClassSE<?>
getType(ELContext context, ObjectSE base, ObjectSE property)
指定されたbase
およびproperty
について、setValue(jakarta.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(jakarta.el.ELContext, java.lang.Object, java.lang.Object, java.lang.Object)
の呼び出しが常に失敗するかどうかを判断しようとします。abstract void
setValue(ELContext context, ObjectSE base, ObjectSE property, ObjectSE value)
指定されたbase
オブジェクトに指定されたproperty
オブジェクトの値を設定しようとします。
メソッドの詳細
getValue
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
- プロパティまたは変数の解決の実行中に例外がスローされた場合。スローされた例外は、可能であれば、この例外の原因プロパティとして含める必要があります。
invoke
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
コンストラクターに渡します。- 導入:
- Jakarta Expression Language 2.2
getType
public abstract ClassSE<?> getType(ELContext context, ObjectSE base, ObjectSE property)
指定されたbase
およびproperty
について、setValue(jakarta.el.ELContext, java.lang.Object, java.lang.Object, java.lang.Object)
メソッドへの将来の呼び出しでvalue
パラメーターとして渡されるオブジェクトに受け入れられる最も一般的な型を識別しようとします。このリゾルバーが指定された(ベース、プロパティ)ペアを処理する場合、戻る前に、リゾルバーによって
ELContext
オブジェクトのpropertyResolved
プロパティをtrue
に設定する必要があります。このメソッドが呼び出された後、このプロパティがtrue
でない場合、呼び出し元は戻り値を無視する必要があります。これは、常に
getValue().getClass()
と同じではありません。例:ArrayELResolver
の場合、getType
メソッドは配列のエレメント型を返します。これは、指定された配列エレメントに現在ある実際のエレメントの型のスーパークラスである可能性があります。リゾルバーまたはプロパティが読み取り専用の場合、このメソッドは
null
を返す必要があります。- パラメーター:
context
- この評価のコンテキスト。base
- プロパティ値を分析するベースオブジェクト、またはトップレベル変数を分析するnull
。property
- 受け入れ可能な型を返すプロパティまたは変数。- 戻り値:
ELContext
のpropertyResolved
プロパティがtrue
に設定された場合、プロパティまたはリゾルバーが読み取り専用の場合、最も一般的に受け入れられる型はnull
でなければなりません。それ以外は未定義- 例外:
PropertyNotFoundException
- 指定された(ベース、プロパティ)のペアがこのELResolver
によって処理されましたが、指定された変数またはプロパティが存在しないか、読み取りできない場合。ELException
- プロパティまたは変数の解決の実行中に例外がスローされた場合。スローされた例外は、可能であれば、この例外の原因プロパティとして含める必要があります。
setValue
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
- プロパティまたは変数を設定しようとしたときに例外がスローされた場合。スローされた例外は、可能であれば、この例外の原因プロパティとして含める必要があります。
isReadOnly
public abstract boolean isReadOnly(ELContext context, ObjectSE base, ObjectSE property)
特定のbase
およびproperty
について、setValue(jakarta.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
- プロパティまたは変数の解決の実行中に例外がスローされた場合。スローされた例外は、可能であれば、この例外の原因プロパティとして含める必要があります。
getFeatureDescriptors
@DeprecatedSE(forRemoval=true, since="5.0") public IteratorSE<FeatureDescriptorSE> getFeatureDescriptors(ELContext context, ObjectSE base)
非推奨、削除予定: この API 要素は、将来のバージョンで削除される可能性があります。このメソッドは、EL 6.0 では代替なしで削除されます指定されたbase
オブジェクトに対して解決できる変数またはプロパティのセットに関する情報を返します。この方法の 1 つの用途は、ツールが自動補完を支援することです。base
パラメーターがnull
の場合、リゾルバーは解決できるトップレベルの変数のリストを列挙する必要があります。返される
Iterator
には、FeatureDescriptor
SE のゼロ個以上のインスタンスが含まれている必要があり、順序は保証されていません。int
などのプリミティブ型の場合、値null
を返す必要があります。これは、考えられるすべてのプリミティブ値による無駄な反復を防ぐためです。null
の戻り値は、このリゾルバーが指定されたbase
オブジェクトを処理しないか、結果が複雑すぎてこのメソッドで表現できないことを示し、代わりにgetCommonPropertyType(jakarta.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
の結果が連結されます。ELResolver
のデフォルトの実装はnull
を返します。サブクラスは、このメソッドをオーバーライドしたい場合があります。- パラメーター:
context
- この評価のコンテキスト。base
- 有効なプロパティのセットが列挙される基本オブジェクト、またはこのリゾルバーが評価できるトップレベルの変数のセットを列挙するnull
。- 戻り値:
FeatureDescriptor
オブジェクトを 0 個以上(場合によっては無限に多く)含むIterator
、またはこのリゾルバーが与えられたbase
オブジェクトを処理できない場合や、このメソッドで表現するには結果が複雑すぎる場合はnull
。- 関連事項:
FeatureDescriptor
SE
getCommonPropertyType
public 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
型。
convertToType
public <T> T convertToType(ELContext context, ObjectSE obj, ClassSE<T> targetType)
オブジェクトを特定の型に変換します。変換中にエラーが発生すると、
ELException
がスローされます。- パラメーター:
context
- この評価のコンテキスト。obj
- 変換するオブジェクト。targetType
- 変換のターゲット型。- 戻り値:
targetType
に変換されたオブジェクト- 例外:
ELException
- エラーが発生した場合にスローされます。