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了解如果选项值包含在逗号分隔的字符串中,那么应该选择它?
答案 0 :(得分:1)
我不认为模型对象Field
具有适合多重选择的结构。