2012-03-14 49 views
1

使用spring表達式語言提取集合並同時修改集合中每個對象的屬性是否可能?在我的例子中,我有一個用戶名單太郎的用戶列表,我希望限制名稱在顯示在頁面中的長度(所以不要更新原始列表)。此代碼用於通過ajax請求的控制器,用戶列表作爲json數組返回。使用Spring表達式語言(SpEL)更新集合中的屬性

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"); 
+0

請問您可以發佈一些更多信息嗎?您是否嘗試截斷名稱以達到顯示目的?你使用JSP還是JSF?此代碼是否出現在控制器或服務中? – Stefan 2012-03-14 17:02:24

+0

好的,我更新了問題。 – 2012-03-15 07:05:44

回答

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

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

+0

好的,我再次更新了我的問題,希望更清楚一點。 – 2012-03-22 15:07:47

相關問題