public abstract class ExpressionFactory extends ObjectSE
Jakarta Expression Language 式言語を実装するクラスは、この抽象クラスを介して機能を公開します。実装は次の機能をサポートします。
String
を ValueExpression
または MethodExpression
インスタンスに解析します。ELResolver
を実装します newInstance()
メソッドを使用して、実装のインスタンスを取得できます。Jakarta Server Pages や Jakarta Faces などのテクノロジは、ファクトリメソッドを介して実装へのアクセスを提供します。
createValueExpression(jakarta.el.ELContext, java.lang.String, java.lang.Class<?>)
メソッドは、値に評価される式を解析するために使用されます(l 値と r 値の両方がサポートされています)。createMethodExpression(jakarta.el.ELContext, java.lang.String, java.lang.Class<?>, java.lang.Class<?>[])
メソッドは、オブジェクトのメソッドへの参照に評価される式を解析するために使用されます。
モデルオブジェクトの解決は、評価時に、ValueExpression
または MethodExpression
に渡される ELContext
に関連付けられた ELResolver
を介して実行されます。
ELContext オブジェクトは、式の解析時に使用される FunctionMapper
および VariableMapper
へのアクセスも提供します。Jakarta Expression Language 関数と変数のマッピングは解析時に実行され、結果は式にバインドされます。ELContext
、FunctionMapper
、VariableMapper
は将来の使用のために保管されず、Serializable
である必要はありません。
createValueExpression
および createMethodExpression
メソッドはスレッドセーフでなければなりません。つまり、複数のスレッドが同じ ExpressionFactory
オブジェクトでこれらのメソッドを同時に呼び出す可能性があります。一時的な状態に依存する場合、実装はアクセスを同期する必要があります。ただし、実装では、各 ExpressionFactory
型のオブジェクトが 1 つだけインスタンス化されると想定しないでください。グローバルキャッシングは静的である必要があります。
ExpressionFactory
は、expression
パラメーターの次の型の入力を処理できる必要があります。
${}
区切り文字を使用する単一の式(例: "${employee.lastName}"
)。#{}
区切り文字を使用する単一の式(例: "#{employee.lastName}"
)。${}
または #{}
区切り文字を含まないリテラルテキスト(例: "John Doe"
)。"${employee.firstName}${employee.lastName}"
または "#{employee.firstName}#{employee.lastName}"
)。"Name: ${employee.firstName} ${employee.lastName}"
)。 次の型の入力は無効であり、ELException
がスローされる原因となる必要があります。
"${employee.firstName}#{employee.lastName}"
)。"Name: ${employee.firstName} #{employee.lastName}"
)。コンストラクターと説明 |
---|
ExpressionFactory() |
修飾子と型 | メソッドと説明 |
---|---|
abstract ObjectSE | coerceToType(ObjectSE obj, ClassSE<?> targetType) Jakarta Expression Language 型変換規則に従って、オブジェクトを特定の型に強制します。 |
abstract MethodExpression | createMethodExpression(ELContext context, StringSE expression, ClassSE<?> expectedReturnType, ClassSE<?>[] expectedParamTypes) 後で評価するために式を MethodExpression に解析します。 |
abstract ValueExpression | createValueExpression(ELContext context, StringSE expression, ClassSE<?> expectedType) 後で評価するために式を ValueExpression に解析します。 |
abstract ValueExpression | createValueExpression(ObjectSE instance, ClassSE<?> expectedType) オブジェクトインスタンスをラップする ValueExpression を作成します。 |
MapSE<StringSE, MethodSE> | getInitFunctionMap() 事前構成された関数マッピングを含む関数マップを取得します。 |
ELResolver | getStreamELResolver() コレクション内の操作を実装する ELResolver を取得します。 |
static ExpressionFactory | newInstance() ExpressionFactory の新しいインスタンスを作成します。 |
static ExpressionFactory | newInstance(PropertiesSE properties) オプションのプロパティを使用して、 ExpressionFactory の新しいインスタンスを作成します。 |
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
public static ExpressionFactory newInstance()
ExpressionFactory
の新しいインスタンスを作成します。このメソッドは、次の順序付きルックアップ手順を使用して、ロードする ExpressionFactory
実装クラスを決定します。META-INF/services/jakarta.el.ExpressionFactory
という名前のリソースが存在する場合、その最初の行(存在する場合)は、実装クラスの UTF-8 エンコード名として使用されます。 java.util.Properties.load(InputStream)
メソッドで読み取り可能であり、キーが "jakarta.el.ExpressionFactory" であるエントリが含まれている場合、そのエントリの値が実装クラスの名前として使用されます。jakarta.el.ExpressionFactory
システムプロパティを使用します。この名前のシステムプロパティが定義されている場合、その値は実装クラスの名前として使用されます。ExpressionFactory
インスタンス public static ExpressionFactory newInstance(PropertiesSE properties)
ExpressionFactory
の新しいインスタンスを作成します。 このメソッドは、newInstance()
で使用されるものと同じルックアップ手順を使用します。
引数 properties
が null でなく、実装に java.util.Properties
型の単一パラメーターを持つコンストラクターが含まれている場合、コンストラクターを使用してインスタンスが作成されます。
プロパティはオプションであり、実装では無視できます。
プロパティの名前は "jakarta.el." で始まる必要があります
以下は、プロパティの推奨される名前です。
properties
- 実装に渡されるプロパティ。null の場合、プロパティはありません。ExpressionFactory
インスタンス public abstract ValueExpression createValueExpression(ELContext context, StringSE expression, ClassSE<?> expectedType)
ValueExpression
に解析します。値を参照する式には、このメソッドを使用します。 このメソッドは、式の構文検証を実行する必要があります。そうすることでエラーを検出した場合、ELException
を発生させる必要があります。
context
- 式の解析に使用される Jakarta Expression Language コンテキスト。ELContext に格納されている FunctionMapper
と VariableMapper
は、式で見つかった関数と変数を解決するために使用されます。それらは null
である可能性があり、その場合、関数または変数はこの式ではサポートされません。返されるオブジェクトは、提供された FunctionMapper
および VariableMapper
インスタンスのマッピングが ExpressionFactory.createValueExpression()
の呼び出しと ValueExpression
のメソッドの間で変更されるかどうかに関係なく、同じ関数を呼び出し、同じ変数マッピングにアクセスする必要があります。Jakarta Expression Language 内では、${} 構文と #{} 構文は同じように扱われることに注意してください。これには、式の作成時の VariableMapper および FunctionMapper の使用が含まれます。式に #{} 構文と ${} 構文のどちらが使用されているかに関係なく、それぞれが null でない場合に呼び出されます。expression
- 解析する式 expectedType
- 式の結果の型は、評価後に強制変換されます。NullPointerExceptionSE
- expectedType が null の場合にスローされます。ELException
- 提供された式に構文エラーがある場合にスローされます。public abstract ValueExpression createValueExpression(ObjectSE instance, ClassSE<?> expectedType)
このメソッドは、任意のオブジェクトを ValueExpression として渡すために使用できます。ラッパー ValueExpression は読み取り専用であり、オプションで強制変換された getValue()
メソッドを介してラップされたオブジェクトを返します。
instance
- ラップされるオブジェクトインスタンス。expectedType
- 式の結果の型は、評価後に強制変換されます。Object.class の場合、強制はありません。NullPointerExceptionSE
- expectedType が null の場合にスローされます。public abstract MethodExpression createMethodExpression(ELContext context, StringSE expression, ClassSE<?> expectedReturnType, ClassSE<?>[] expectedParamTypes)
MethodExpression
に解析します。メソッドを参照する式には、このメソッドを使用します。 式が文字列リテラルの場合、MethodExpression
が作成され、呼び出されると、expectedReturnType に強制変換された文字列リテラルが返されます。expectedReturnType が void の場合、または文字列リテラルを expectedReturnType に強制変換するとエラーが発生する場合は、ELException がスローされます (「1.16 型変換」セクションを参照)。
このメソッドは、式の構文検証を実行する必要があります。そうすることでエラーを検出した場合、ELException
を発生させる必要があります。
context
- 式の解析に使用される Jakarta Expression Language コンテキスト。ELContext に格納されている FunctionMapper
と VariableMapper
は、式で見つかった関数と変数を解決するために使用されます。それらは null
である可能性があり、その場合、関数または変数はこの式ではサポートされません。返されるオブジェクトは、提供された FunctionMapper
および VariableMapper
インスタンスのマッピングが ExpressionFactory.createMethodExpression()
の呼び出しと MethodExpression
のメソッドの間で変更されるかどうかに関係なく、同じ関数を呼び出し、同じ変数マッピングにアクセスする必要があります。EL 内では、${} 構文と #{} 構文は同じように扱われることに注意してください。これには、式の作成時の VariableMapper および FunctionMapper の使用が含まれます。式に #{} 構文と ${} 構文のどちらが使用されているかに関係なく、それぞれが null でない場合に呼び出されます。expression
- 解析する式 expectedReturnType
- 検出されるメソッドの期待戻り値の型。式を評価した後、MethodExpression
は、実際のメソッドの戻り値の型がこの型と一致することを確認する必要があります。null
の値を渡すと、呼び出し元は戻り値の型が何であるかを気にせず、チェックが無効になります。expectedParamTypes
- 検出されるメソッドに予想されるパラメーター型。パラメーターが予期されていない場合は、要素のない配列である必要があります。メソッドが Jakarta Expression Language 式の引数で指定されていない限り、null
を渡すことは不正です。この場合、これらの引数はメソッドの選択に使用され、このパラメーターは無視されます。ELException
- 提供された式に構文エラーがある場合にスローされます。NullPointerExceptionSE
- paramTypes が null
の場合。public abstract ObjectSE coerceToType(ObjectSE obj, ClassSE<?> targetType)
ELResolver
でのカスタム型変換は考慮されません。 変換ルールの適用によってエラーが発生した場合、ELException
がスローされます。
obj
- 強制するオブジェクト。targetType
- 強制のターゲット型。targetType
に強制されたオブジェクト ELException
- 変換ルールの適用によってエラーが発生した場合にスローされます。public ELResolver getStreamELResolver()
この ELResolver は、base
が Collection
または Map
であり、property
が操作の名前である場合に、ペア(base
、property
)でのメソッド呼び出しを解決します。
これらの演算子、それらの引数、戻り値の詳細な説明については、仕様書を参照してください。
ELResolver
。Copyright © 2018,2020 Eclipse Foundation.
Use is subject to license terms.