我有一個域模型,其中包含許多'元素',這些元素可以被渲染以顯示豐富的內容。有一些HTML文本,紡織文本,Flash對象等等。這些元素的基本特徵被封裝在AbstractElement
中,其具有實現HTMLElement
,FlashElement
等等。因此該模型有一個List<AbstractElement>
來包含它可以擁有的所有元素。帶泛型的自動增長列表
編輯模型時,我希望用戶能夠動態添加元素,並在用戶提交表單時保存這些元素。所以我所擁有的是一種可通過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來完成它?這將如何工作?有什麼我可以在模型中自動做到這一點?
是不是PropertyEditor被設計爲處理單個文本值(如日期格式)到Java對象?我將如何添加額外的請求參數? – DCKing
從你的問題來看,似乎最終用戶正在HTML表單上填充各種textareas並提交它。在提交時,我以爲你想以某種方式根據每個textarea的內容來確定要實例化的正確類型的對象。你可以使用PropertyEditor在一個字符串和任何類型的對象之間進行轉換,所以我認爲它適用於你。如果我沒有正確理解表單,請提供更多詳細信息,我會盡力提供幫助。 – khill
正如您在示例表格中所看到的那樣,元素將具有「content」屬性並不一定。它可以有一個'文件'屬性。一個PropertyEditor不能聽那個。此外,不同類型的基於文本的內容不能根據字符串的內容來區分。 – DCKing