パッケージ jakarta.el

クラス ELResolver

  • 既知の直属サブクラス
    ArrayELResolverBeanELResolverBeanNameELResolverCompositeELResolverImplicitObjectELResolverImportELResolverListELResolverMapELResolverNotFoundELResolverResourceBundleELResolverScopedAttributeELResolverStaticFieldELResolverTypeConverter

    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 だけですが、通常、特定の変数またはプロパティの解決のために考慮される複数のリゾルバーがあります。ELResolverCompositeELResolver を使用して結合され、式を評価するための豊富なセマンティクスを定義します。

    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()
    • フィールドの詳細

      • TYPE

        public static final StringSE TYPE
        変数またはプロパティのランタイム型を指定する FeatureDescriptor の名前付き属性の属性名。
        関連事項:
        定数フィールド値
      • RESOLVABLE_AT_DESIGN_TIME

        public static final StringSE RESOLVABLE_AT_DESIGN_TIME
        変数またはプロパティを実行時に解決できるかどうかを指定する FeatureDescriptor の名前付き属性の属性名。
        関連事項:
        定数フィールド値
    • コンストラクターの詳細

      • ELResolver

        public ELResolver()
    • メソッドの詳細

      • 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 - メソッドを呼び出す Bean
        method - 呼び出すメソッドの単純な名前。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 - エラーが発生した場合にスローされます。