パッケージ jakarta.el
Jakarta Expression Language は、もともと Web アプリケーション開発者の特定のニーズを満たすために設計された単純な言語です。それは、Web コンテナーの内部および外部での一般的な使用を目的とした独自の仕様に進化しました。
このパッケージには、Jakarta Expression Language エンジンへのプログラムによるアクセスを記述および定義するクラスとインターフェースが含まれています。API は、次のように論理的に分割されています。
- Jakarta Expression Language Context
- 式オブジェクト
- 式の作成
- 式の評価
- 評価リスナー
- モデルオブジェクトとそのプロパティの解決
- Jakarta Expression Language Functions
- Jakarta Expression Language Variables
- スタンドアロン環境の Jakarta Expression Language
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 つあります。
- 評価前
- 評価後
- (base、property)が解決されたとき
モデルオブジェクトとそのプロパティの解決
ELResolver
基本クラスを通じて、Jakarta Expression Language は、モデルオブジェクト参照、およびこれらのオブジェクトのプロパティとメソッド呼び出しを解決するためのプラグ可能なメカニズムを備えています。
Jakarta Expression Language API は、配列(ArrayELResolver
)、JavaBeans(BeanELResolver
)、List
s(ListELResolver
)、Map
s(MapELResolver
)、および ResourceBundle
s(ResourceBundleELResolver
)を含む一般的なデータ型の ELResolver
サポートプロパティ解決の実装を提供します。
Jakarta Expression Language Functions
Jakarta Expression Language 式が関数(たとえば、${fn:toUpperCase(customer.name)}
)を使用する場合、FunctionMapper
オブジェクトも ELContext
内で指定する必要があります。FunctionMapper
は、${prefix:name()}
スタイルの関数を、指定された関数を実行できる静的メソッドにマップするロールを果たします。
Jakarta Expression Language Variables
FunctionMapper
が Jakarta Expression Language に機能を追加するための柔軟なメカニズムを提供するように、VariableMapper
は Jakarta 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 5.0 には、スタンドアロン環境で Jakarta Expression Language を使用するための API が含まれています。
ELProcessor
は、式を直接評価するための単純な API を提供します。また、関数の定義、変数の設定、Bean のローカルでの定義も簡単になります。
ELManager
は、Jakarta Expression Language の解析および評価環境を管理するための下位レベルの API を提供します。デフォルトの ELContext StandardELContext
が含まれています。
インターフェースのサマリー インターフェース 説明 ELContextListener ELContext
が作成されたときに通知を受信するためのリスナーインターフェース。クラスのサマリー クラス 説明 ArrayELResolver 配列のプロパティ解決動作を定義します。BeanELResolver JavaBeans コンポーネントアーキテクチャを使用して、オブジェクトのプロパティ解決動作を定義します。BeanNameELResolver ユーザーまたはコンテナー管理 Bean を解決するためのELResolver
。BeanNameResolver Bean を既知の名前で解決します。CompositeELResolver 子ELResolver
の順序付けられた複合リストを維持します。ELClass Jakarta Expression Language 式でのクラスのランタイム表現。ELContext 式の解析および評価のコンテキスト情報。ELContextEvent ELContext
が作成されたことを示すイベント。ELManager Jakarta Expression Language の解析および評価環境を管理します。ELProcessor スタンドアロン環境で Jakarta Expression Language を使用するための API を提供します。ELResolver Jakarta Expression Language 式評価の変数、プロパティ、メソッド呼び出し、型変換解決動作のカスタマイズを有効にします。EvaluationListener Jakarta Expression Language 式が評価されたときに通知を受け取るためのリスナーインターフェース。Expression 式のサブクラスValueExpression
およびMethodExpression
の基本クラス。両方に共通の特性を実装します。ExpressionFactory Jakarta Expression Language 式を作成および評価するための実装を提供します。FunctionMapper Jakarta Expression Language 関数名とメソッド間のマップへのインターフェース。ImportHandler クラス名とパッケージ名のインポートを処理します。LambdaExpression パラメーター化されたValueExpression
をカプセル化します。ListELResolver List
SE のインスタンスのプロパティ解決動作を定義します。MapELResolver Map
SE のインスタンスのプロパティ解決動作を定義します。MethodExpression オブジェクトのメソッドを参照するExpression
。MethodInfo MethodExpression
が評価したメソッドに関する情報を保持します。MethodReference メソッド式が解決されるメソッドに関する情報を提供します。ResourceBundleELResolver ResourceBundle
SE のインスタンスのプロパティ解決動作を定義します。StandardELContext スタンドアロン環境での使用に適した標準の ELContext。StaticFieldELResolver 静的フィールド、列挙定数、静的メソッドを解決するためのELResolver
。TypeConverter カスタム型変換を行うための ELResolver を作成するための便利なクラス。ValueExpression 値を取得または設定できるExpression
。ValueReference これは、ベースモデルオブジェクトとそのプロパティの 1 つをカプセル化します。VariableMapper Jakarta Expression Language 変数とそれらが関連付けられている Jakarta Expression Language 式の間のマップへのインターフェース。例外のサマリー 例外 説明 ELException 式の評価中に発生する可能性のある例外条件を表します。MethodNotFoundException MethodExpression
の評価中にメソッドが見つからなかった場合にスローされます。PropertyNotFoundException ValueExpression
またはMethodExpression
の評価中にプロパティが見つからなかった場合にスローされます。PropertyNotWritableException ValueExpression
に値を設定しているときにプロパティに書き込めなかった場合にスローされます。