0

私の Java アプリケーションでは、オブジェクト指向の解釈されたスクリプト言語 (ANTLR を使用して指定) を使用しており、それを Velocity と共に使用したいと考えています。

私の言語のオブジェクトは、次のように見える DataObject のインスタンスによって表されます (簡略化):

public class DataObject {
    protected Map<String, Object> properties;

    public Map<String, DataEntity> getProperties() {
        return properties;
    }

    public Object getProperty(String name) {
        return properties.get(name);
    }
}

オブジェクト インスタンス $foo のプロパティは、$foo.bar としてアクセスできます。

ここで、$foo を VelocityContext に入れたとします。

DataObject foo = new DataObject();
velocityContext.put("foo", foo);

私の知る限り、次のいずれかの方法でプロパティ (DataObject.properties に存在する) に速度でアクセスできます。

<span>$foo.getProperties().get('bar')</span>
<span>$foo.getProperties()['bar']</span>
<span>$foo.getProperties().bar</span>
<span>$foo.properties.bar</span>

ここで私の主な質問: $foo.bar が Java プロパティ dataObject.bar ではなく直接 dataObject.properties.get("bar") をアドレス指定するように動作を変更して、$ を使用できるようにする方法はありますか?自分のスクリプト言語で行うのと同じように、Velociy 内で foo.bar を使用しますか?

4

1 に答える 1

2

Velocity にそのトリックを教えることはできません。しかし、DataObject にトリックを教えることができます。

public class DataObject {
    protected Map<String, Object> properties;

    public Map<String, DataEntity> getProperties() {
        return properties;
    }

    public Object get(String name) {
        return properties.get(name);
    }
}

getBar() または getbar() メソッドが見つからない場合、Velocity は自動的に $foo で get('bar') を探します。

于 2012-06-28T15:24:07.317 に答える