Java 在启用Spring的Velocity模板内绑定变量集合

Java 在启用Spring的Velocity模板内绑定变量集合,java,spring,collections,binding,velocity,Java,Spring,Collections,Binding,Velocity,假设Velocity 1.5模板有以下表单支持对象: 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" 如果在

假设Velocity 1.5模板有以下表单支持对象:

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”,则velocity可以为我绑定支持对象的属性:

#springFormSingleSelect( "boData.data1" $labelKeys "")
#springFormSingleSelect( "boData.data2" $labelKeys "")
#springFormSingleSelect( "boData.data3" $labelKeys "")
#springFormSingleSelect( "boData.data4" $labelKeys "")
但是,有没有办法避免调用#springFormSingleSelect四次?我的意思是,这里有一个模式,但我看不出用速度来表达它的方式

例如,如果我将类Bucket中的这四个字符串属性定义为Java数组或Java.util.List,我如何告诉velocity我需要它为列表中的每个元素绑定一个下拉单选择控件

public class Bucket {
    List<String> dataItems = new ArrayList<String>();
    // getter, setter...
}
公共类存储桶{
List dataItems=new ArrayList();
//盖特,塞特。。。
}

我感谢您提供的任何见解

不确定我是否理解这个问题。 但似乎您只需要一个
foreach
循环。 在Velocity中,您也可以键入java,如果这能让您的生活更轻松的话

但是,您可以执行以下操作:

#set ($map = $myobject.getMap() )
#foreach ($mapEntry in $map.entrySet())
     // $mapEntry.key
     // $mapEntry.value
    #springFormSingleSelect( "boData.data1" $mapEntry.key "")
#end
您可以对列表执行相同的操作


我希望这有帮助。关于,

我不确定我是否理解这个问题。 但似乎您只需要一个
foreach
循环。 在Velocity中,您也可以键入java,如果这能让您的生活更轻松的话

但是,您可以执行以下操作:

#set ($map = $myobject.getMap() )
#foreach ($mapEntry in $map.entrySet())
     // $mapEntry.key
     // $mapEntry.value
    #springFormSingleSelect( "boData.data1" $mapEntry.key "")
#end
您可以对列表执行相同的操作

我希望这有帮助。关于,

怎么样:

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

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

我不确定答案是否清楚。试图解释 Spring-velocity绑定需要整个路径作为#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

这将绑定集合项。

我不确定答案是否清楚。试图解释 Spring-velocity绑定需要整个路径作为#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

这将绑定集合项。

是的。成功了。谢谢事实证明,为了帮助Spring找到我想要绑定到的对象属性,我必须派生一个索引路径。使用$i迭代索引有帮助。例如,
boData.singleDataItem[$i].myProperty
Yup。成功了。谢谢事实证明,为了帮助Spring找到我想要绑定到的对象属性,我必须派生一个索引路径。使用$i迭代索引有帮助。例如,
boData.singleDataItem[$i].myProperty