2009-04-24 20 views
16

Ho bisogno di utilizzare OGNL per leggere alcune proprietà dall'oggetto Java. OGNL è una cosa completamente nuova per me. La documentazione disponibile per OGNL è il sito web di OGNL è davvero confuso per me.OGNL Hello World in Java

Quindi chiunque può fornire un semplice esempio HelloWorld per l'utilizzo di OGNL (o anche qualsiasi collegamento a un tutorial è utile).

risposta

9

Prova questo:

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

Ecco un esempio HelloWorld per jython (python che compila in 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

Se l'intenzione è solo di leggere le proprietà da un oggetto poi PropertyUtils.getProperty (da commons beanutils) può essere sufficiente. Tuttavia, se l'intenzione è di valutare condizionali e simili, allora Ognl potrebbe trarne beneficio.

Ecco lo stesso esempio Dimension con un valore 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 
0

OGNL permette di accedere campi e metodi degli oggetti tramite espressioni di stringa che diventa molto utile quando si è perdere accoppiato architettura tra i dati ed è il consumatore. Sta usando la riflessione sotto il cofano, ma sicuramente accelera lo sviluppo rispetto ad un approccio di pura riflessione.

Alcuni esempi una linea

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

Documentation ha già una serie di espressioni di base e più avanzati OGNL.