Frage

Ich muss OGNL verwenden, um einige Eigenschaften aus dem Java -Objekt zu lesen. Ognl ist für mich völlig neu. Die für OGNL verfügbare Dokumentation ist die OGNL -Website für mich sehr verwirrend.

So kann jeder ein einfaches bereitstellen HelloWorld Beispiel für die Verwendung von OGNL (oder einen Link zu einem Tutorial ist ebenfalls hilfreich).

War es hilfreich?

Lösung

Versuche dies:

    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);

Andere Tipps

Wenn die Absicht nur darin besteht, Eigenschaften aus einem Objekt zu lesen, können PropertyUtils.getProperty (von Commons-Beanutils) ausreichen. Wenn es jedoch beabsichtigt, Konditionals und dergleichen zu bewerten, kann OGNL davon profitieren.

Hier ist das gleiche Dimensionsbeispiel mit einem Booleschen:

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

Mit OGNL können Sie über String -Ausdrücke auf Objekte und Methoden zugreifen, die sehr nützlich werden, wenn Sie die gekoppelte Architektur zwischen Daten und ihren Verbrauchern verlieren. Es verwendet Reflexion unter der Motorhaube, beschleunigt aber definitiv die Entwicklung im Vergleich zu einem reinen Reflexionsansatz.

Beispiele für eine Zeile

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

Dokumentation hat bereits eine Reihe grundlegender und fortgeschrittenerer OGNL -Ausdrücke.

Hier ist ein Beispiel HelloWorld für Jython (Python, der Java kompiliert).

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

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

print Ognl.getValue(exp, OgnlContext(), String("abcdefghj"))
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top