2009-04-24 26 views
16

Necesito usar OGNL para leer algunas propiedades del objeto Java. OGNL es algo completamente nuevo para mí. La documentación disponible para OGNL es muy confusa para mí.OGNL Hello World en Java

Así que cualquier persona puede proporcionar un ejemplo simple HelloWorld para usar OGNL (o cualquier enlace a un tutorial también es útil).

Respuesta

9

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

Aquí es un ejemplo para holamundo 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")) 
7

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 condicionales y demás, entonces Ognl puede beneficiarse.

Aquí es el mismo ejemplo dimensión con un valor lógico:

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

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. Está usando la reflexión debajo del capó pero definitivamente acelera el desarrollo en comparación con un enfoque de reflexión pura.

Algunos ejemplos una línea

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

Documentation ya cuenta con una serie de expresiones básicas y más avanzadas OGNL.