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).
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"))