Javaオブジェクトからいくつかのプロパティを読み取るためにOGNLを使用する必要があります。OGNLは私にとってまったく新しいものです。OGNLで利用できるドキュメントは、OGNLのWebサイトが本当に混乱していることです。
したがって、誰でもOGNLを使用するための簡単なHelloWorld
例を提供できます(またはチュートリアルへのリンクも役立ちます)。
Javaオブジェクトからいくつかのプロパティを読み取るためにOGNLを使用する必要があります。OGNLは私にとってまったく新しいものです。OGNLで利用できるドキュメントは、OGNLのWebサイトが本当に混乱していることです。
したがって、誰でもOGNLを使用するための簡単なHelloWorld
例を提供できます(またはチュートリアルへのリンクも役立ちます)。
これを試して:
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 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を使用すると、文字列式を介してオブジェクトのフィールドとメソッドにアクセスできます。これは、データとそのコンシューマーの間の結合アーキテクチャが失われた場合に非常に役立ちます。内部でリフレクションを使用していますが、純粋なリフレクションアプローチと比較して開発が確実にスピードアップします。
いくつかの1行の例
System.out.println(Ognl.getValue("x", new Point(5,5)));
System.out.println(Ognl.getValue("size", new ArrayList<Object>()));
ドキュメントには、すでにいくつかの基本的でより高度なognl式があります。
これは、 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"))