OGNL Hello World на Java - PullRequest
       14

OGNL Hello World на Java

17 голосов
/ 24 апреля 2009

Мне нужно использовать OGNL для чтения некоторых свойств из объекта Java. OGNL - совершенно новая для меня вещь. Документация, доступная для OGNL, является веб-сайтом OGNL, и это меня смущает.

Таким образом, любой может предоставить простой HelloWorld пример использования OGNL (или любая ссылка на руководство также полезна).

Ответы [ 4 ]

10 голосов
/ 12 ноября 2009

Попробуйте это:

    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);
8 голосов
/ 08 июня 2010

Если целью является только чтение свойств из объекта, то может быть достаточно PropertyUtils.getProperty (из 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
0 голосов
/ 09 января 2014

OGNL позволяет вам получать доступ к полям и методам объектов через строковые выражения, что становится очень полезным, когда вы теряете связанную архитектуру между данными и их потребителями. Он использует отражение под капотом, но, безусловно, ускоряет разработку по сравнению с подходом чистого отражения.

Некоторые примеры из одной строки

System.out.println(Ognl.getValue("x", new Point(5,5)));
System.out.println(Ognl.getValue("size", new ArrayList<Object>()));

Документация уже содержит ряд базовых и более сложных выражений ognl.

0 голосов
/ 30 ноября 2009

Вот пример helloworld для jython (python, который компилируется в Java).

from ognl import Ognl, OgnlContext
from java.lang import String

exp = Ognl.parseExpression("substring(2, 5)")

print Ognl.getValue(exp, OgnlContext(), String("abcdefghj"))
...