Эта простая программа, использующая OGNL, возвращает мне список нулевых значений вместо [A, B, D]. Я пробовал #root{#x.get(#this)}
и все еще возвращает мне список нулей. Зачем? Благодарю.Выбор OGNL с картой
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 + "]");
}
}
Update:
Использование #root.{#z=#this, #x[#z]}
. Глупо, но это работает. Я считаю, что это ошибка, но Apache OGNL 4 находится в подвешенном состоянии, а OGNL 3.0.6 - это ... Я не уверен, что он поддерживается; дистрибутив даже не компилируется, потому что он имеет неправильные зависимости.
Не могли бы вы рассказать, чего вы пытаетесь достичь с помощью этого выражения? Возможно, это может быть сделано по-другому. В любом случае для объяснения, почему он возвращает null, см. Мой ответ. –
Он должен возвращать [A, B, D]. Учитывая массив ключей, верните мне список значений с карты. –
Да, но почему вы так делаете? Зачем использовать проекцию над корневым объектом, а не над картой? Любая причина для этого? –