DCK*_*ing 7 java spring spring-mvc
我有一个域模型,其中包含许多"元素",可以呈现的文本片段以显示丰富的内容.有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>
Run Code Online (Sandbox Code Playgroud)
提交表单时出错.很明显为什么 - 提交时,Spring会尝试实例化列表中的必需元素.由于元素列表包含AbstractElement抽象类型的对象,因此Spring无法实例化新元素.
我如何让Spring实例化适当类型的元素?可以在表单中添加类型信息,并有一些ModelAttribute吗?那会怎么样?我可以在模型中做些什么来自动执行此操作吗?
我最终通过实现一个 ModelAttribute 来解决这个问题,该 ModelAttribute 通过解析原始表单数据来构造元素列表。可以通过使用HttpServletRequest对象、循环参数映射并“手动”创建所需的对象来解析原始表单数据。如果将它放入辅助函数中,它是可重用的,尽管我在使用它的每个控制器中都需要一个 ModelAttribute。
这不是理想的解决方案,但它确实有效。
| 归档时间: |
|
| 查看次数: |
1046 次 |
| 最近记录: |