使用Apache Velocity和自己的解释脚本语言

时间:2012-06-27 16:27:56

标签: java velocity interpreted-language

在我的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吗?

1 个答案:

答案 0 :(得分: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')。

相关问题