簡體   English   中英

使用Apache Velocity和自己的解釋腳本語言

[英]Using Apache Velocity with own interpreted script 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就像我用我自己的腳本語言一樣?

你不能教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')。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM