假设我有一个Velocity 1.5模板的以下表格支持对象:
public class Bucket {
String data1;
String data2;
String data3;
String data4;
// getters setters blah blah...
}
我想将这四个String属性绑定到以下四个下拉单选控件的java.util.Map中:
"a" : "1"
"b" : "2"
"c" : "3"
"d" : "4"
如果在我的页面控制器模型中,我将后备对象命名为“boData”,并且值map“labelKeys”,velocity可以为我绑定后备对象的属性:
#springFormSingleSelect( "boData.data1" $labelKeys "")
#springFormSingleSelect( "boData.data2" $labelKeys "")
#springFormSingleSelect( "boData.data3" $labelKeys "")
#springFormSingleSelect( "boData.data4" $labelKeys "")
但是,有没有办法避免四次调用#springFormSingleSelect?我的意思是,这里有一个模式,但我无法用Velocity的术语来表达它。
例如,如果我将类Bucket中的这四个String属性定义为Java数组或java.util.List,我怎么能告诉velocity我需要它来为每个元素绑定一个下拉单选控件在列表中?
public class Bucket {
List<String> dataItems = new ArrayList<String>();
// getter, setter...
}
感谢您提供的任何见解!
答案 0 :(得分:4)
我不确定答案是否清楚。试着解释一下 Spring velocity binding需要整个路径作为#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
这将绑定集合项。
答案 1 :(得分:0)
不确定我是否理解这个问题。
但似乎只需要一个foreach
循环。
在Velocity中,如果能让你的生活更轻松,你也可以输入java。
但是你可以这样做:
#set ($map = $myobject.getMap() )
#foreach ($mapEntry in $map.entrySet())
// $mapEntry.key
// $mapEntry.value
#springFormSingleSelect( "boData.data1" $mapEntry.key "")
#end
您可以对列表执行相同操作。
我希望这会有所帮助。的问候,
答案 2 :(得分:0)
怎么样:
#foreach($i in [1..4])
#set($field = "boData.data" + $i)
#springFormSingleSelect($field $labelKeys "")
#end