tl; dr : У меня есть пользовательский объект, который не является коллекцией.Как я могу заставить Spring привязать его к множественному выбору?
У меня есть объект Field
, который содержит поле с именем value
, которое является строкой, с геттерами и сеттерами.Иногда поле value
содержит одно значение, и оно будет отображаться в текстовом поле.В других случаях поле value
будет содержать список, разделенный запятыми, и его нужно отобразить в поле множественного выбора.
У меня есть карта этих полей (например, {"MY_MULTI_FIELD", Field.class}
, которую я получаю следующим образом:
Текст
<form:input maxlength="200" path="fields[MY_TEXT_FIELD]" disabled="${springIsDisabled}" />
Multiselect
<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 понять, что если значение параметра содержится в строке через запятую, то его следует выбрать?