栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Spring MVC中绑定列表映射

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在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));          }      });  }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/409952.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号