OGNL Hello World в Java
Мне нужно использовать OGNL для чтения некоторых свойств из объекта Java. OGNL - это совершенно новая вещь для меня. Документация, доступная для OGNL, является веб-сайтом OGNL, который действительно запутывает меня.
Поэтому любой может предоставить простой пример HelloWorld
для использования OGNL (или любая ссылка на учебник также полезна).
Ответы
Ответ 1
Попробуйте следующее:
Dimension d = new Dimension(2,2);
String expressionString = "width";
Object expr = Ognl.parseExpression(expressionString);
OgnlContext ctx = new OgnlContext();
Object value = Ognl.getValue(expr, ctx, d);
System.out.println("Value: " + value);
Ответ 2
Если целью является только чтение свойств объекта, то PropertyUtils.getProperty(from commons-beanutils) может быть достаточным. Однако, если намерение заключается в оценке условностей и тому подобных, то Ognl может выиграть.
Вот такой пример измерения с булевым:
Dimension d = new Dimension();
d.setSize(100,200) ;// width and height
Map<String,Object> map = new HashMap<String,Object>();
map.put("dimension", d);
String expression = "dimension.width == 100 && dimension.height == 200";
Object exp = Ognl.parseExpression(expression);
Boolean b = (Boolean) Ognl.getValue(exp,map);
// b would evaluate to true in this case
Ответ 3
OGNL позволяет вам обращаться к полям и методам объектов с помощью строковых выражений, что становится очень полезным, когда вы теряете взаимосвязанную архитектуру между данными и ее потребителями. Он использует отражение под капотом, но определенно ускоряет развитие по сравнению с методом чистого отражения.
Некоторые примеры из одной строки
System.out.println(Ognl.getValue("x", new Point(5,5)));
System.out.println(Ognl.getValue("size", new ArrayList<Object>()));
Документация уже содержит ряд базовых и более продвинутых выражений ognl.
Ответ 4
Вот пример helloworld для jython (питон, который компилируется в java).
from ognl import Ognl, OgnlContext
from java.lang import String
exp = Ognl.parseExpression("substring(2, 5)")
print Ognl.getValue(exp, OgnlContext(), String("abcdefghj"))