2011-08-15 62 views
0

假設我有一個速度1.5模板下面的表單支持對象:綁定春季啓用Velocity模板內的變量集合

public class Bucket { 

    String data1; 
    String data2; 
    String data3; 
    String data4; 

    // getters setters blah blah... 
} 

我想結合這四個屬性的字符串爲以下的java.util字符串的.MAP,裏面四個分上下單選擇控件:

"a" : "1" 
"b" : "2" 
"c" : "3" 
"d" : "4" 

如果我的網頁的控制器模型裏面,我命名爲支持對象「boData」,和值映射「labelKeys」,速度可以綁定的支持對象屬性對我來說:

#springFormSingleSelect("boData.data1" $labelKeys "") 
#springFormSingleSelect("boData.data2" $labelKeys "") 
#springFormSingleSelect("boData.data3" $labelKeys "") 
#springFormSingleSelect("boData.data4" $labelKeys "") 

但是,有沒有辦法避免調用#springFormSingleSelect四次?我的意思是,這裏有一個模式,但我無法用Velocity的術語來看它的表達方式。

例如,如果我將類Bucket中的這四個String屬性定義爲Java數組或java.util.List,我怎麼能知道我需要它的速度來綁定每個下拉單選控件列表中的元素?

public class Bucket { 
    List<String> dataItems = new ArrayList<String>(); 
    // getter, setter... 
} 

我感謝您的任何洞察,你可以提供!

回答

0

如何:

#foreach($i in [1..4]) 
    #set($field = "boData.data" + $i) 
    #springFormSingleSelect($field $labelKeys "") 
#end 
+0

是。這工作。謝謝!。事實證明,我不得不派生一個索引路徑,以幫助Spring找到我想綁定到的對象屬性。使用$ i迭代索引有所幫助。例如。 'boData.singleDataItem [$ i] .myProperty' –

0

不知道我是否理解這個問題。 但似乎所有你需要的是一個foreach循環。 在Velocity中,你也可以輸入java,如果這樣可以讓你的生活更輕鬆。

但是你可以這樣做:

#set ($map = $myobject.getMap()) 
#foreach ($mapEntry in $map.entrySet()) 
    // $mapEntry.key 
    // $mapEntry.value 
    #springFormSingleSelect("boData.data1" $mapEntry.key "") 
#end 

你可以做同樣的列表。

我希望這會有所幫助。問候,

4

我不知道如果答案是明確的。試圖解釋 春天速度結合需要作爲參數傳遞給#springBind 整個路徑,所以如果你有一個集合dataItems,你不能綁定像

#foreach($dataItem in $dataItems) 
     #springFormSingleSelect("dataItem.data1" $labelKeys "") 
    #end 

相反

#set ($end = $dataItems.size() - 1) 
    #foreach($i in [0..$end]) 
     #springFormSingleSelect("dataItems[$i].data1" $labelKeys "") 
    #end 

這將綁定收集物品。