Авторастущий список с дженериками

У меня есть модель домена, в которой есть несколько "элементов", фрагментов текста, которые могут быть отображены, чтобы показать богатый контент. Есть куски 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 делал это? Как это будет работать? Есть ли что-то, что я могу сделать в модели, что сделает это автоматически?

7
задан DCKing 4 December 2011 в 22:41
поделиться