OGNL Hello World in Java

时间:2009-04-24 13:39:06

标签: ognl

我需要使用OGNL从Java对象中读取一些属性。 OGNL对我来说是全新的事情。可用于OGNL的文件是OGNL的网站,对我来说真的很困惑。

所以任何人都可以提供一个简单的HelloWorld示例来使用OGNL(或任何教程链接也很有用)。

4 个答案:

答案 0 :(得分:10)

试试这个:

    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 :(得分:8)

如果只想读取对象的属性,那么PropertyUtils.getProperty(来自commons-beanutils)就足够了。但是,如果目的是评估条件等,那么Ognl可能会受益。

这是与布尔值相同的Dimension示例:

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

答案 2 :(得分:0)

OGNL允许您通过字符串表达式访问对象字段和方法,当您丢失数据与其消费者之间的耦合体系结构时,这变得非常有用。它使用引擎盖下的反射,但与纯粹的反射方法相比,肯定会加速开发。

一些行示例

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

Documentation已经有许多基本的和更高级的ognl表达式。

答案 3 :(得分:-1)

以下是jython的一个示例helloworld(编译为java的python)。

from ognl import Ognl, OgnlContext
from java.lang import String

exp = Ognl.parseExpression("substring(2, 5)")

print Ognl.getValue(exp, OgnlContext(), String("abcdefghj"))