我需要使用 OGNL 从 Java 对象中读取一些属性。OGNL 对我来说是全新的事物。OGNL 可用的文档是 OGNL 的网站,这让我很困惑。
因此,任何人都可以提供一个HelloWorld
使用 OGNL 的简单示例(或者任何指向教程的链接也很有帮助)。
我需要使用 OGNL 从 Java 对象中读取一些属性。OGNL 对我来说是全新的事物。OGNL 可用的文档是 OGNL 的网站,这让我很困惑。
因此,任何人都可以提供一个HelloWorld
使用 OGNL 的简单示例(或者任何指向教程的链接也很有帮助)。
尝试这个:
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);
如果目的只是从对象中读取属性,那么 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
OGNL 允许您通过字符串表达式访问对象字段和方法,当您失去数据与其消费者之间的耦合架构时,这将变得非常有用。它在引擎盖下使用反射,但与纯反射方法相比肯定会加快开发速度。
一些单行示例
System.out.println(Ognl.getValue("x", new Point(5,5)));
System.out.println(Ognl.getValue("size", new ArrayList<Object>()));
文档已经有一些基本的和更高级的 ognl 表达式。
这是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"))