这个使用 OGNL 的简单程序返回一个空值列表而不是 [A,B,D]。我已经尝试过#root{#x.get(#this)}
并且仍然返回给我一个空值列表。为什么?谢谢。
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import ognl.Ognl;
public class ognlTest {
static public void main(String[] args) throws Exception
{
Map<String, Object> m = new HashMap<String, Object>();
m.put("a", "A");
m.put("b", "B");
m.put("c", "C");
m.put("d", "D");
List<String> k = new ArrayList<>();
k.add("a");
k.add("b");
k.add("d");
Map<String, Object> context = new HashMap<String, Object>();
context.put("x", m);
Object expression = Ognl.parseExpression( "#root.{ #x[#this] }");
Object value = Ognl.getValue( expression, context, k);
System.out.println("value = [" + value + "]");
}
}
更新:
使用#root.{#z=#this, #x[#z]}
. 愚蠢,但它有效。我相信这是一个错误,但 Apache OGNL 4 处于不确定状态,而 OGNL 3.0.6 是......我不确定它是否得到维护;该发行版甚至无法编译,因为它具有错误的依赖关系。