18

Javaオブジェクトからいくつかのプロパティを読み取るためにOGNLを使用する必要があります。OGNLは私にとってまったく新しいものです。OGNLで利用できるドキュメントは、OGNLのWebサイトが本当に混乱していることです。

したがって、誰でもOGNLを使用するための簡単なHelloWorld例を提供できます(またはチュートリアルへのリンクも役立ちます)。

4

4 に答える 4

12

これを試して:

    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);
于 2009-11-12T16:12:12.013 に答える
8

オブジェクトからプロパティを読み取ることだけを目的としている場合は、PropertyUtils.getProperty(commons-beanutilsから)で十分な場合があります。ただし、条件などを評価することを目的としている場合は、Ognlが役立つ可能性があります。

ブール値を使用した同じディメンションの例を次に示します。

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
于 2010-06-08T16:46:37.833 に答える
2

OGNLを使用すると、文字列式を介してオブジェクトのフィールドとメソッドにアクセスできます。これは、データとそのコンシューマーの間の結合アーキテクチャが失われた場合に非常に役立ちます。内部でリフレクションを使用していますが、純粋なリフレクションアプローチと比較して開発が確実にスピードアップします。

いくつかの1行の例

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

ドキュメントには、すでにいくつかの基本的でより高度なognl式があります。

于 2014-01-09T06:48:10.790 に答える
0

これは、 jython(javaにコンパイルされるpython)のhelloworldの例です。

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

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

print Ognl.getValue(exp, OgnlContext(), String("abcdefghj"))
于 2009-11-30T20:02:10.307 に答える