我需要使用OGNL从Java对象中读取一些属性。 OGNL对我来说是全新的事情。可用于OGNL的文件是OGNL的网站,对我来说真的很困惑。
所以任何人都可以提供一个简单的HelloWorld
示例来使用OGNL(或任何教程链接也很有用)。
答案 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"))