最新の安定バージョンについては、Spring Framework 6.2.8 を使用してください!

変数

#variableName 構文を使用して、式の変数を参照できます。変数は、EvaluationContext 実装で setVariable メソッドを使用して設定されます。

有効な変数名は、サポートされている次の文字の 1 つ以上で構成されている必要があります。

  • アルファベット: A から Z および a から z

  • 数字: 0 から 9

  • 下線: _

  • ドル記号: $

次の例は、変数の使用方法を示しています。

  • Java

  • Kotlin

Inventor tesla = new Inventor("Nikola Tesla", "Serbian");

EvaluationContext context = SimpleEvaluationContext.forReadWriteDataBinding().build();
context.setVariable("newName", "Mike Tesla");

parser.parseExpression("name = #newName").getValue(context, tesla);
System.out.println(tesla.getName())  // "Mike Tesla"
val tesla = Inventor("Nikola Tesla", "Serbian")

val context = SimpleEvaluationContext.forReadWriteDataBinding().build()
context.setVariable("newName", "Mike Tesla")

parser.parseExpression("name = #newName").getValue(context, tesla)
println(tesla.name)  // "Mike Tesla"

#this および #root 変数

#this 変数は常に定義され、現在の評価オブジェクトを参照します(どの非修飾参照が解決されるかに対して)。#root 変数は常に定義され、ルートコンテキストオブジェクトを参照します。#this は式のコンポーネントが評価されると異なる場合がありますが、#root は常にルートを参照します。次の例は、#this 変数と #root 変数の使用方法を示しています。

  • Java

  • Kotlin

// create an array of integers
List<Integer> primes = new ArrayList<>();
primes.addAll(Arrays.asList(2,3,5,7,11,13,17));

// create parser and set variable 'primes' as the array of integers
ExpressionParser parser = new SpelExpressionParser();
EvaluationContext context = SimpleEvaluationContext.forReadOnlyDataAccess();
context.setVariable("primes", primes);

// all prime numbers > 10 from the list (using selection ?{...})
// evaluates to [11, 13, 17]
List<Integer> primesGreaterThanTen = (List<Integer>) parser.parseExpression(
		"#primes.?[#this>10]").getValue(context);
// create an array of integers
val primes = ArrayList<Int>()
primes.addAll(listOf(2, 3, 5, 7, 11, 13, 17))

// create parser and set variable 'primes' as the array of integers
val parser = SpelExpressionParser()
val context = SimpleEvaluationContext.forReadOnlyDataAccess()
context.setVariable("primes", primes)

// all prime numbers > 10 from the list (using selection ?{...})
// evaluates to [11, 13, 17]
val primesGreaterThanTen = parser.parseExpression(
		"#primes.?[#this>10]").getValue(context) as List<Int>