2011-04-01 187 views
17

我們如何在Freemarker中的已創建SequenceModel實例中添加值?在SimpleSequence中添加值--FreeMarker

對於例如:我有下面創建一個列表(SequenceModel)的方式:

<#assign x = ["red", 16, "blue", "cyan"]> 

現在是有辦法,我可以另一種顏色添加到我的名單上面?

回答

34

你必須通過連接x並且只包含新元素的順序,以創建一個新的序列:

<#assign x = x + [ "green" ] /> 
+0

這是否意味着即使序列在Freemarker中是不可變的? – Vicky 2011-04-01 13:12:05

+1

@Vicky SequenceModel類具有add方法,但在語法中不存在任何調用它們的方法。所以我的解決方案是做到這一點的唯一方法(缺少編寫Java代碼並將其添加到模型當然)。 – 2011-04-01 13:18:18

+1

是的,就模板語言而言,序列(和散列)是不可變的。 'SimpleSequence'只是序列實現之一,'SimpleSequence.add'只是用來初始化Java中的一個序列。 – ddekany 2015-01-10 13:45:37

13

FreeMarker的基本上是一次性寫入的語言。它試圖很難使其無法操縱數據,以及包括修改陣列或地圖等

可以解決這個問題,但是,通過級聯和再分配:

<#assign my_array = [] /> 
<#list 1..10 as i> 
    <#assign my_array = my_array + ["value " + i] /> 
</#list> 

這將導致包含「值1」到「值10」的數組。如果這看起來不夠雅緻,那是因爲它的目的是這樣。從FreeMarker的意識形態角度來看,一旦你開始構建數組等,你已經超越了模板語言應該做的事情,以及模型,控制器,幫助類等應該在Java代碼中做什麼。在FreeMarker中工作可能會讓你越是偏離這個觀點而變得非常令人沮喪。

http://freemarker.sourceforge.net/docs/app_faq.html#faq_modify_seq_and_map來自:

的FreeMarkes模板語言不支持序列/散列的修改。它用於顯示已計算的內容,而不是用於計算數據。保持模板簡單。但不要放棄,你會看到一些建議和詭計。