2

春の式言語でコレクションを抽出し、同時にコレクション内の各オブジェクトのプロパティを変更することは可能ですか? 私の例では、名前が長すぎるユーザーのリストがあり、ページに表示される前に名前の長さを制限したいと考えています (元のリストを更新しないでください)。このコードは、ajax 経由で要求されたコントローラーで使用され、ユーザーのリストが json 配列として返されます。

ExpressionParser parser = new SpelExpressionParser();
EvaluationContext context = new StandardEvaluationContext(rankedUsers);
List<User> longNamedUsers = (List<User>) parser.parseExpression("?[name.length() > 20]").getValue(context);

EvaluationContext newContext = new StandardEvaluationContext(longNamedUsers);
// the below does not work but throws an exception
//parser.parseExpression("?[name]").setValue(newContext, "test");
4

2 に答える 2

0

SpringのELは、オブジェクトまたはオブジェクトのグラフからデータを抽出するために使用され、それらのオブジェクトに値を変更または設定するためには使用されません。setValue()を呼び出すExpressionと、式が解析されたオブジェクトではなく、パーサーから返されたものになります。

于 2012-03-16T20:01:14.430 に答える
0

あなたにはいくつかの可能性があり、達成したいことが重要です。すべての名前を取得し、特定のサイズよりも長い名前を短くするには、次のようにします。

List<User> lu = new ArrayList<User>();
lu.add(new User("Short user name"));
lu.add(new User("Very long user name which should be shortend"));

ExpressionParser parser = new SpelExpressionParser();
EvaluationContext context = new StandardEvaluationContext(lu);

List<String> names = (List<String>)parser.parseExpression("![name.length() > 20 ? name.substring(0,20) : name]").getValue(context);

for (String name : names) {
    System.out.println("Name: " + name);
}
于 2012-03-28T22:16:37.530 に答える