1

我有表单支持对象:

public class MyDto {
  private Set<MyEnum> myEnum = new HashSet<MyEnum>();
  // getters/setters

  public MyEnym[] getMyEnumValues() {
     return MyEnum.values();
  }
}
public MyEnum {
A, B, C
}

在我的表单支持对象中显示所有枚举值<form:select multiple="true"/> 并实现将选定值自动映射到字段的方法是什么?myEnum

更新: 一些代码:

<form:select path="myEnum" multiple="true" items="${myDto.myEnumValues}"/>

提交表单时,多选中的选定值会显示在 HTTP 请求中:

myEnum: A
myEnum: B


public String saveMyDto(@Valid @ModelAttribute("myDto") MyDto myDto) {

    log.debug("Enum list: " + myDto.myEnum().toString());
    .... 
}
4

1 回答 1

2

关键思想是将值分配给 的item属性 form:select

我用表单填充视图的控制器添加

  modelMap.addAttribute("possibleValues", MyEnum.values);

在jsp中使用:

<form:select multiple="true" items="${possibleValues}" path="myDto.myEnum"/>

(另一方面,我记得我看过spring的select标签实现,发现它的实际值是一个Enum,然后spring自动使用allEnum.values作为默认值items(但我不是100% 确定))

控制器方法应该看起来像

@RequestMapping(value="/form", Method=RequestMethod.GET)
public ModelAndView whatever() {
     ModelMap modelMap = new ModelMap();
     modelMap.addAttribute("possibleValues", MyEnum.values);
     return new ModelMap("nameOfTheView", modelMap);
}

@RequestMapping(value="/whatever", Method=RequestMethod.POST)
public ModelAndView whatever(MyDto myDto) {
      Sysout.println(myDto);
}
于 2013-12-03T18:44:55.947 回答