2014-10-29 87 views
0

目的:要使用的Freemarker生成以下形式插入列表項作爲屬性?

public void save(){ 
    helper.save(); 
} 

public void load(){ 
    helper.load(); 
} 

//Other such lifecycle methods 

的Java代碼基本上,我有一個「生命週期」方法名了一把,我想爲每一個他們的代碼。但是,如果傳入的模型對象需要它,我只會生成一個方法。我的模型類的樣子:

public class Model{ 
    private boolean load; 
    private boolean save; 
    //bools for other lifecycle methods 

    public Model(boolean load, boolean save){ 
     this.load = load; 
     this.save = save; 
    } 

    public boolean getLoad(){ 
     return load; 
    } 

    public boolean getSave(){ 
     return save; 
    } 
} 

我Freemarker模板:

<#assign methodNames = ["load", "save"]> 
<#list methodNames as method> 
<#if model.method> 
public void ${method}(){ 
    helper.${method}(); 
} 
</#if> 
</#list> 

然而,<#if>聲明不起作用。 Freemarker抱怨model.methodnull。它看起來像Freemarker在我的模型中尋找getMethod(),而不是將model解析爲saveload,然後查找getSave()getLoad()

我嘗試以下,但在所有情況下的Freemarker抱怨一個語法錯誤或其它:

<#assign methodNames = ["load", "save"]> 
<#list methodNames as method> 
<#assign methodRequired = r"model.${method}"> 
<#if <@methodRequired?interpret>> 
public void ${method}(){ 
    helper.${method}(); 
} 
</#if> 
</#list> 

這失敗,出現錯誤,說我不能有<@methodRequired><#if>內。我也直接嘗試<#if model.${method}>但這顯然不起作用。

爲了完整起見,這裏是我如何調用模板:

//Obtain a writer object first. Then ... 
Model model = new Model(true, false); 
myTemplate.process(model, writer); 
writer.close(); 

所以,問題是 - 我怎麼問的Freemarker給我一個列表變量的值從裏面另一個模型對象?

回答

1

這和其他典型語言非常相似:model[method]model.method實際上是model["method"]的簡寫。你也可以寫model["foo" + someVar]這樣的東西,所以它的someContainer[someKeyExpression]

+0

這樣做。我所要做的就是在'if'條件中使用這個語法:'<#if model [method]>' – curioustechizen 2014-10-30 07:31:25