说明: 如果在您的控制器中有
@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)); } }); }}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)