2011-09-09 98 views
0

我正在使用Freemarker(FMPP)自定義文本文件。我想有定義插值數據的屬性文件,如下所示:引用另一個變量的Freemarker變量定義

VAR1=some-value 
VAR2=${VAR1} 

這是非常從我的實際文件簡化,但保留了我的用例的本質。該模板包含形式爲${VAR2}的參考,我期望導致some-value被內插。相反,內插值是文字${VAR1}

請注意,這與Can a freemarker interpolation contain an interpolation?不同,它指將變量的值用作變量的名稱(間接引用)。另外,can freemarker do second replacement的解決方案涉及修改模板。我希望替換在模板處理之前在概念上發生,因此模板只能引用${VAR2},而不需要知道雙重插值。

有沒有辦法在FreeMarker中做到這一點?

如果不是,有人可以告訴我Velocity是否會輕鬆做到這一點?

回答

2

您在.properties文件中引用的變量是否始終來自相同的.properties文件?如果是這樣,那麼你可以寫一個自定義的FMPP DataLoader,它可以在你加載文件的時候完成你需要的所有替換。 (或者,tdd數據加載器還可以實現利用get(varname)也許有些eval(...) -s類似的東西,但是這可能爲了這個目的太冗長。)

作爲解決這一模板上的語言水平,這需要${...}的輸出被重新解釋爲一個模板片段,然後我也假設它不在,直到輸出中沒有任何內容看起來像模板語言結構。我不知道這樣做的任何模板語言。但是,如果需要的字符串包含自定義TemplateScalarModel實現,則可以在FreeMarker中解決這個問題,只要有東西讀取字符串的值,就會執行此重複評估。 (要在FMPP中使用這樣的自定義TemplateModel,您還需要一個自定義的FMPP數據加載器,它會在將這些字符串返回到FMPP之前以這種特殊方式包裝這些字符串。)

+0

這就是我的想法,我已經來了相同的結論。我研究了兩步解決方案,首先將屬性變量作爲模板處理(替換外部參數),然後將其作爲「真實」模板上第二次轉換的輸入。 –

相關問題