是否可以使用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");
答案 0 :(得分:0)
Spring的EL用于从对象或对象图中提取数据,而不是在这些对象上改变或设置值。当你调用setValue()时,它位于解析器返回的Expression
上,而不是解析Expression的对象。
答案 1 :(得分: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);
}