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

¿Fue ú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"))
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top