Pregunta
Necesito usar OGNL para la lectura de algunas propiedades de objeto Java. OGNL es algo completamente nuevo para mí. La documentación disponible para OGNL es el sitio web del OGNL es muy confuso para mí.
Así que cualquiera puede proporcionar un ejemplo sencillo de utilización de HelloWorld
OGNL (o cualquier enlace a un tutorial también es útil).
Solución
Prueba esto:
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);
Otros consejos
Si la intención es sólo para leer las propiedades de un objeto entonces PropertyUtils.getProperty (de Commons-BeanUtils) puede ser suficiente. Sin embargo, si la intención es evaluar los condicionales y tal, entonces Ognl puede beneficiar.
Aquí está el mismo ejemplo dimensión con un valor booleano:
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
OGNL le permite acceder a los campos y métodos de objetos a través de expresiones de cadena que se vuelve muy útil cuando se ha acoplado perder la arquitectura entre los datos y es consumidores. Se trata de utilizar la reflexión bajo el capó, pero sin duda acelera el desarrollo en comparación con un enfoque puro reflejo.
Algunos ejemplos de línea de uno
System.out.println(Ognl.getValue("x", new Point(5,5)));
System.out.println(Ognl.getValue("size", new ArrayList<Object>()));
documentación ya tiene un número de básico y avanzado expresiones OGNL.
Aquí es un holamundo ejemplo para jython (pitón que compila a java).
from ognl import Ognl, OgnlContext
from java.lang import String
exp = Ognl.parseExpression("substring(2, 5)")
print Ognl.getValue(exp, OgnlContext(), String("abcdefghj"))