簡體   English   中英

使用Spring表達式語言(SpEL)更新集合中的屬性

[英]Update property in collection with spring expression language (SpEL)

Spring表達式語言是否可以提取集合並同時修改集合中每個對象的屬性? 在我的示例中,我有一個用戶名列表,該用戶名名稱為lang,我想限制名稱的長度,然后再在頁面上顯示它們(以免更新原始列表)。 此代碼在通過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");

Spring的EL用於從對象或對象圖中提取數據,而不是對這些對象進行突變或設置值。 當您調用setValue()時,它位於解析器返回的Expression上,而不是從中解析Expression的對象上。

您有一些可能性,要實現的目標至關重要。 要獲得所有名稱,然后將長度大於一定大小的名稱縮短,您可以按以下方式進行操作:

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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM