クラス 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 StringSERESOLVABLE_AT_DESIGN_TIME変数またはプロパティを実行時に解決できるかどうかを指定するFeatureDescriptorの名前付き属性の属性名。static StringSETYPE変数またはプロパティのランタイム型を指定するFeatureDescriptorの名前付き属性の属性名。
コンストラクターの概要
コンストラクター コンストラクター 説明 ELResolver()
方法の概要
すべてのメソッド インスタンスメソッド 抽象メソッド 具象メソッド 非推奨のメソッド 修飾子と型 メソッド 説明 <T> TconvertToType(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 ObjectSEgetValue(ELContext context, ObjectSE base, ObjectSE property)指定されたbaseオブジェクトで指定されたpropertyオブジェクトを解決しようとします。ObjectSEinvoke(ELContext context, ObjectSE base, ObjectSE method, ClassSE<?>[] paramTypes, ObjectSE[] params)指定されたbaseオブジェクトで指定されたmethodを解決して呼び出すことを試みます。abstract booleanisReadOnly(ELContext context, ObjectSE base, ObjectSE property)特定のbaseおよびpropertyについて、setValue(jakarta.el.ELContext, java.lang.Object, java.lang.Object, java.lang.Object)の呼び出しが常に失敗するかどうかを判断しようとします。abstract voidsetValue(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には、FeatureDescriptorSE のゼロ個以上のインスタンスが含まれている必要があり、順序は保証されていません。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。- 関連事項:
FeatureDescriptorSE
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- エラーが発生した場合にスローされます。