Pergunta

Preciso usar o OGNL para ler algumas propriedades do objeto Java. Ognl é uma coisa completamente nova para mim. A documentação disponível para o OGNL é o site da Ognl é realmente confuso para mim.

Então qualquer um pode fornecer um simples HelloWorld Exemplo para usar o OGNL (ou qualquer link para um tutorial também é útil).

Foi útil?

Solução

Experimente isso:

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

Outras dicas

Se a intenção é apenas ler propriedades de um objeto, o PropertyUtils.getProperty (da Commons-Beanutils) poderá ser suficiente. No entanto, se a intenção é avaliar condicionais e outros, o OGNL poderá se beneficiar.

Aqui está o mesmo exemplo de dimensão com um 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

O OGNL permite acessar os campos e métodos de objetos por meio de expressões de string, que se tornam muito úteis quando você perde a arquitetura acoplada entre dados e seus consumidores. Ele está usando reflexão sob o capô, mas definitivamente acelera o desenvolvimento em comparação com uma abordagem de reflexão pura.

Alguns exemplos de linha

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

Documentação já possui várias expressões básicas e mais avançadas da OGNL.

Aqui está um exemplo de helloworld para Jython (Python que compila com 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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top