[英]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.