Spring MVC将逗号分隔列表绑定到多选

时间:2010-09-07 21:47:53

标签: java spring jsp spring-mvc

tl; dr :我有一个不是Collection的自定义对象。如何让Spring将它绑定到多个选择?

我有一个对象Field,其中包含一个名为value的字段,它是一个字符串,带有getter和setter。 有时,value字段包含单个值,并且这些值将显示在文本框中。其他时候value字段将包含以逗号分隔的列表,并且需要在多选框中显示。

我有这些字段的地图(例如{"MY_MULTI_FIELD", Field.class},如下所示:

文本

  <form:input maxlength="200" path="fields[MY_TEXT_FIELD]" disabled="${springIsDisabled}" />

复选

<form:select cssClass="required" path="fields[MY_MULTI_FIELD]" items="${blah}" size="5" multiple="true" disabled="${springIsDisabled}" />

我有一个FieldEditor,我在我的控制器中注册

binder.registerCustomEditor(Field.class, new FieldEditor());

看起来像这样

public class FieldEditor extends PropertyEditorSupport {

  @Override
  public String getAsText() {
    Field field = (Field) getValue();
    return field.getValue();
  }

  @Override
  public void setAsText(String text) throws IllegalArgumentException {
    setValue(text);
  }

}

我只有一个文本字段的情况很好。此外,如果只选择多选框中的一个项目,它可以正常工作。

问题是当我们从多选框中选择多个项目时。当我们在保存后查看表单时,看起来好像没有从多选中选择任何值。 getAsText()返回逗号分隔的字符串,当然与任何一个选项值的值不匹配,而是多个选项的组合。

例如,如果我们选择

<option value="test">Test</option> <option value="test2">Test2</option>

value字段为“test,test2”。

如何让Spring了解如果选项值包含在逗号分隔的字符串中,那么应该选择它?

1 个答案:

答案 0 :(得分:1)

我不认为模型对象Field具有适合多重选择的结构。