ナビゲーションリンクをスキップ

Jakarta EE 8 仕様 API

パッケージ javax.el

Jakarta Expression Language 3.0 の API を提供する

参照先: 説明

パッケージ javax.el の説明

Jakarta Expression Language 3.0 の API を提供する

Jakarta Expression Language は、もともと Web アプリケーション開発者の特定のニーズを満たすために設計された単純な言語です。それは、Web コンテナーの内部および外部での一般的な使用を目的とした独自の仕様に進化しました。

このパッケージには、Jakarta Expression Language エンジンへのプログラムによるアクセスを記述および定義するクラスとインターフェースが含まれています。API は、次のように論理的に分割されています。

Jakarta Expression Language Context

Jakarta Expression Language の重要なゴールは、さまざまな環境で使用できるようにすることです。使用されている環境の特定の要件に適応するのに十分な柔軟性を提供する必要があります。

クラス ELContext は、Jakarta Expression Language をそれが使用されている特定の環境にリンクするものです。これは、式を作成または評価するためのすべての関連コンテキストを指定するためのメカニズムを提供します。

Jakarta Expression Language が Web コンテナーで使用される場合、ELContext  オブジェクトの作成は、基盤となるテクノロジーによって制御されます。例: Jakarta Server Pages では、JspContext.getELContext() ファクトリメソッドが使用されます。スタンドアロン環境では、デフォルトの StandardELContext が提供されます。

一部のテクノロジーは、ELContextListener を追加する機能を提供します。これにより、アプリケーションとフレームワークは、独自に作成したコンテキストオブジェクトを新しく作成された ELContext に確実にアタッチできます。

式オブジェクト

式言語の中核となるのは、式言語で定義された文法に従って解析されるの概念です。

Jakarta Expression Language で定義されている式には 値式メソッド式の 2 種類があります。"${customer.name}" などの ValueExpression は、 右辺値(モデルオブジェクト customer のプロパティ name に関連付けられた値を返す)または左辺値(モデルオブジェクト customer のプロパティ name の値を設定)として使用できます。

"${handler.process}" などの MethodExpression を使用すると、特定のモデルオブジェクト(handler)でメソッド(process)を呼び出すことができます。

バージョン 2.2 以降では、どちらのタイプの Jakarta Expression Language 式も、メソッド呼び出しへの引数が式で指定されている ${trader.buy("JAVA")} などのメソッド呼び出しを表すことができます。

すべての式クラスは基本クラス Expression を継承し、直列化可能にして、強制的に equals() および hashCode() を実装します。さらに、実際に式を評価するこれらの式クラスの各メソッドは、式の評価に必要なコンテキストを提供するクラス ELContext のパラメーターを受け取ります。

式の作成

式は、ExpressionFactory クラスを介して作成されます。ファクトリでは 2 つの作成方法を提供しています。Jakarta Expression Language でサポートされている式のタイプごとに 1 つ。

式を作成するには、ELContext、式を表す文字列、予期される型(ValueExpression)または署名(MethodExpression)を指定する必要があります。ELContext は、式の解析に必要なコンテキストを提供します。具体的には、式が Jakarta Expression Language 関数(たとえば ${fn:toUpperCase(customer.name)})または Jakarta Expression Language 変数を使用する場合、Jakarta Expression Language 関数と Jakarta Expression Language 変数が適切にマップされるように、FunctionMapper および VariableMapper オブジェクトが ELContext 内で使用可能である必要があります。

式の評価

式の作成と評価は、2 つの別々のステップで行われます。式の評価時に、ELContext は、モーダルオブジェクトのプロパティとメソッドの解決をサポートするために必要なコンテキストを提供します。

遅延式は、作成されましたがすぐには評価されない式です。Jakarta Faces リクエスト処理のライフサイクルでは、Jakarta Expression Language 式は通常、ツリー構築フェーズで作成され、レンダリングフレーズで評価されます。

ValueExpression にパラメーターを追加すると、遅延式の機能がさらに強化されます。LambdaExpression はそのような構造をカプセル化します。LambdaExpression は、評価時に実際のパラメーターを指定することで呼び出すことができます。これは、コレクションのオペレーターのサポートにおいて重要なロールを果たします。

評価リスナー

ELContext に EvaluationListener を登録することにより、ユーザーは Jakarta Expression Language 式の評価中に通知を受け取ることができます。通知をトリガーするイベントは 3 つあります。

モデルオブジェクトとそのプロパティの解決

ELResolver 基本クラスを通じて、Jakarta Expression Language は、モデルオブジェクト参照、およびこれらのオブジェクトのプロパティとメソッド呼び出しを解決するためのプラグ可能なメカニズムを備えています。

Jakarta Expression Language API は、配列(ArrayELResolver)、JavaBeans(BeanELResolver)、Lists(ListELResolver)、Maps(MapELResolver)、および ResourceBundles(ResourceBundleELResolver)を含む一般的なデータ型の ELResolver サポートプロパティ解決の実装を提供します。

ELResolver でメソッド getFeatureDescriptors を呼び出すことにより、ツールは解決可能なモデルオブジェクトとその解決可能なプロパティに関する詳細情報を簡単に取得できます。このメソッドは、型 java.beans.FeatureDescriptor のオブジェクトを公開し、最上位のモデルオブジェクトとそのプロパティに関する重要なすべての情報を提供します。

Jakarta Expression Language Functions

Jakarta Expression Language 式が関数(たとえば、${fn:toUpperCase(customer.name)})を使用する場合、FunctionMapper オブジェクトも ELContext 内で指定する必要があります。FunctionMapper は、${prefix:name()} スタイルの関数を、指定された関数を実行できる静的メソッドにマップするロールを果たします。

Jakarta Expression Language Variables

FunctionMapper が Jakarta Expression Language に機能を追加するための柔軟なメカニズムを提供するように、VariableMapperJakarta Expression Language 変数の概念をサポートするための柔軟なメカニズムを提供します。

Jakarta Expression Language 変数は、ELResolver で解決できるモデルオブジェクトを直接参照しません。代わりに、Jakarta Expression Language 式を参照します。その Jakarta Expression Language 式の評価により、Jakarta Expression Language 変数にその値が与えられます。

例: 次のコードスニペット

<h:inputText value="#{handler.customer.name}"/>
handler は、Jakarta Expression Language Resolver で解決できるモデルオブジェクトを指します。

ただし、この他の例では:

<c:forEach var="item" items="#{model.list}">
   <h:inputText value="#{item.name}"/>
</c:forEach>
item はモデルオブジェクトを直接参照しないため、Jakarta Expression Language 変数です。代わりに、別の Jakarta Expression Language 式、つまり、Jakarta Expression Language 式 #{model.list} によって参照されるコレクション内の特定のアイテムを参照します。

${model.list} に 3 つの要素があるとすると、これは、<h:inputText> の呼び出しごとに、item に関する次の情報を VariableMapper に保持する必要があることを意味します。

最初の呼び出し: item は ${model.list} の最初の要素にマップされます
2 番目の呼び出し: item は ${model.list} の 2 番目の要素にマップされます
3 番目の呼び出し: item は ${model.list} の 3 番目の要素にマップされます

VariableMapper は、Jakarta Expression Language 変数をその値を取得する Jakarta Expression Language 式にマッピングできるようにするために必要なメカニズムを提供します。

スタンドアロン環境の Jakarta Expression Language

Jakarta Expression Language 3.0 には、スタンドアロン環境で Jakarta Expression Language を使用するための API が含まれています。

ELProcessor は、式を直接評価するための単純な API を提供します。また、関数の定義、変数の設定、Bean のローカルでの定義も簡単になります。

ELManager は、Jakarta Expression Language の解析および評価環境を管理するための下位レベルの API を提供します。デフォルトの ELContext StandardELContext が含まれています。

ナビゲーションリンクをスキップ

Jakarta EE 8 仕様 API

Copyright © 2019 Eclipse Foundation.
Use is subject to license terms.