Spring MVC + Velocity:绑定DropDown选项的正确方法

时间:2013-06-07 17:49:23

标签: java spring-mvc velocity

我有一个表单,其中包含一些用弹簧速度宏绑定的字段:

#springFormInput("model.email", "required email='true' maxlength='100'")
#springFormInput("model.name", "required maxlength='100'")
...

我想将DropDown绑定到一个值,并将该DropDown的OPTIONS设置为我的模型上的值,如:

public class MyDto {
    private String email;
    private String name;
    private String dropdownValue;
    private List<String> dropdownOptions;

    ...
}

我的观点是:

#springFormInput("model.email", "required email='true' maxlength='100'")
#springFormInput("model.name", "required maxlength='100'")
#springFormSingleSelect("model.dropdownValue", "dropdownOptions", "required")
...

它不起作用。该列表没有值。 我怎么能这样做?

2 个答案:

答案 0 :(得分:3)

来自文档:

#springFormSingleSelect ($path $options $attributes)
  • 下拉框选项,允许选择一个必需的值。


参数:

  • path :要绑定的字段的名称(即searchCriteria.title)。

  • options Map包含可在输入字段中选择的所有可用值。地图的键表示将从表单POST返回并绑定到命令对象的值。属于该键的值用作向用户显示的标签。通常这种映射由控制器作为参考数据提供。可以使用任何Map实现,具体取决于所需的行为。

  • attributes :要包含在其中的任意标记或文字的附加字符串 HTML标签本身。该字符串由宏回显字面。例如,在 textarea字段您可以提供'rows="5" cols="60"'属性或者您可以传递属性 样式信息,例如'style="border:1px solid silver"'





因此,在您的具体情况下,您必须dropdownOptions Map

private Map<String, String> dropdownOptions;

map.put("x","y")一样向地图添加对象会生成<option value="x">y</option>

然后在视图中使用它:

#springFormSingleSelect("model.dropdownValue", $model.dropdownOptions,"required")




出于好奇,此处宏的代码(对.keySet()的调用需要Map):

#macro( springFormSingleSelect $path $options $attributes )
    #springBind($path)
    <select id="${status.expression}" name="${status.expression}" ${attributes}>
        #foreach($option in $options.keySet())
            <option value="${option}"
            #if("$!status.value" == "$option")
                selected="selected"
            #end>
            ${options.get($option)}</option>
        #end
    </select>
#end

答案 1 :(得分:0)

我发现了一个类似的问题,我希望答案可以帮助你解决这个问题。

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

the source