hello, OGNL その3

コンテキストの意味を理解するため、次のメソッドを使ってみる。


Ognl#getValue(java.lang.Object tree, java.util.Map context, java.lang.Object root)
サンプルコードは次の通り。

import ognl.*;
import java.util.*;

public class OgnlSample
{
public static void main(String[] args) {
try {
// コンテキストを生成。
OgnlContext context = new OgnlContext();

// オブジェクトを生成。
Map foo = new HashMap();
foo.put("hoge", "hogehoge");
Map bar = new HashMap();
bar.put("hoge", "hogera");

// オブジェクトをコンテキストに格納。
context.put("foo_key", foo);
context.put("bar_key", bar);

Object value = Ognl.getValue("foo_key", (Map) context, (Object) null);
System.out.println(value);
Object value2 = Ognl.getValue("bar_key.hoge", (Map) context, (Object) null);
System.out.println(value2);
} catch (Exception e) {
e.printStackTrace();
}
}
}

で、実行すると…

ognl.OgnlException: source is null for getProperty(null, "foo_key")
at ognl.OgnlRuntime.getProperty(OgnlRuntime.java:1611)
...
…失敗。プロパティ名をそのまま書くと、ルートオブジェクトのプロパティにアクセスするみたい。
ので修正。

foo_key→#foo_key
bar_key→#bar_key
で、結果。

{hoge=hogehoge}
hogera
期待したとおりの結果。