2

是否可以使用 spring 表达式语言来提取集合并同时修改集合中每个对象的属性?在我的示例中,我有一个名称太长的用户列表,我想在名称显示在页面之前限制名称的长度(因此不要更新原始列表)。此代码用于通过 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 回答