在Spring MVC中绑定列表映射

在Spring MVC中绑定列表映射,第1张

在Spring MVC中绑定列表映射

说明: 如果在您的控制器中有

@ModelAttribute("user") Useruser
,并且您加载了一个包含的相应页面,则将
<form:form commandName="user">
实例化一个空用户。

其所有属性均为null,如果是List或Map,则为空。此外,其空列表/映射已通过自动增长的实现实例化。这是什么意思
?假设我们有一个空的自动增长

List<Coconut>coconuts
。如果我这样做
coconuts.get(someIndex).setDiameter(50)
,它将工作而不是引发异常,因为列表自动增长并为给定索引实例化一个椰子。
由于这种自动增长,使用以下输入内容提交表单将非常有用:

<form:input path="coconuts[${someIndex}].diameter" />

现在回到您的问题: Spring
MVC自动增长可以很好地与一系列对象配合使用,每个对象都包含一个地图/列表。但是给定您的例外,看来Spring不会自动增长自动增长的列表/地图所包含的可能对象。在中

Map<String,List<PrsCDData>> prsCDData
List<PrsCDData>
只是一个没有自动增长的空列表,因此导致您的异常。

因此,解决方案必须使用某种Apache
Common的LazyList或Spring的AutoPopulatingList。
您必须实现自己的自动增长映射,该映射实例化给定索引的LazyList / AutoPopulatingList。从头开始或使用某种Apache
Common的LazyMap
/
MapUtils.lazyMap实现(到目前为止,我还没有找到与LazyMap等效的Spring)。

使用Apache Commons Collections的解决方案示例:

public class PrsData {  private Map<String, List<PrsCDData>> prsCDData;  public PrsData() {      this.prsCDData = MapUtils.lazyMap(new HashMap<String,List<Object>>(), new Factory() {          public Object create() {   return LazyList.decorate(new ArrayList<PrsCDData>(),        FactoryUtils.instantiateFactory(PrsCDData.class));          }      });  }}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5020344.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-15
下一篇 2022-11-15

发表评论

登录后才能评论

评论列表(0条)

保存