У меня есть модель домена, в которой есть несколько "элементов", фрагментов текста, которые могут быть отображены, чтобы показать богатый контент. Есть куски HTML-текста, текстильного текста, Flash-объектов и так далее. Основные характеристики этих элементов заключены в AbstractElement
, который имеет реализации HTMLElement
, FlashElement
и так далее. Поэтому модель имеет List
, чтобы содержать все элементы, которые она может иметь.
При редактировании модели я хочу, чтобы пользователь мог динамически добавлять элементы и сохранять их при отправке формы. Итак, у меня есть форма, которая динамически расширяется с помощью JavaScript, что приводит к следующей форме:
<form action=...>
<!-- Other attributes -->
<textarea name="object.elements[0].content"/>
<textarea name="object.elements[1].content"/>
<!-- Some elements are based on text, others on files -->
<input type="hidden" name="object.elements[2].file" value="somevalue"/>
<textarea name="object.elements[3].content"/>
<!-- Submit button -->
</form>
При отправке формы происходит сбой. Совершенно очевидно, почему - при отправке формы Spring пытается инстанцировать необходимые элементы в списке. Поскольку список элементов содержит объекты типа AbstractElement
, который является абстрактным, Spring не может инстанцировать новые элементы.
Как мне сделать так, чтобы Spring инстанцировал элемент нужного типа? Можно ли добавить информацию о типе в форму, и чтобы какой-то ModelAttribute делал это? Как это будет работать? Есть ли что-то, что я могу сделать в модели, что сделает это автоматически?