2011-09-13 110 views
0
春季结合地图

我试图绑定Map<String, org.springframework.util.AutoPopulatingList<B>>与Spring Framework和我得到以下异常:其中包含列表

ERROR [jsp:165] org.springframework.beans.NullValueInNestedPathException: Invalid property 'command.map[key][0]' of bean class 
troller.form.CommandForm]: Cannot access indexed value in property referenced in indexed property path 'map[key][0]': returned null 

Command对象是这样的:

public class Command { 
    private Map<String, AutoPopulatingList<B>> map; 
    //getters and setters for map 
} 

和B类是像

Public class B { 
    private String name; 
    private String age; 
} 

和JSP代码是这样的

<c:forEach var="entry" items="${command.map}"> 
    <c:forEach var="b" items="${entry.value}"> 
     <form:hidden path="command.map[${entry.key}][${status.index}]" /> 
     <c:out value="${b.name}" /> 
    </c:forEach> 
</c:forEach> 

我想我还应该提到,地图是动态的,所以我不知道有多少条目或哪些大小的地图的列表将是。当我将新条目添加到地图时发生问题。

我知道这与初始化List在Map中有关,但这不是为什么建议使用AutoPopulateList,所以不应该有任何初始化相关的问题?

这可以绑定到Spring框架吗?

+0

您确定您可以使用EL像这样处理地图吗?它似乎是你试图访问矩阵字段。我只是猜测,也许你需要一些额外的括号:(command.map [$ {entry.key}])[$ {status.index}]? – Less

+0

我很确定地图可以像EL一样使用。即使生成的HTML显示正确的输入元素,如果我从数据库填充地图,我可以添加更多的B对象到现有的列表。 假设我有内容[key1 [b1,b2,b3]]的地图,我想添加它[key2 [b3,b4]],那么我得到NullValueInNestedPathException – Timii

回答

1

我只是通过预先填充地图对象中的地图和数组来解决问题。 所以要创建它,请使用

@ModelAttribute(FORM_PRECRUISE_SHOPPING) 
@Valid 
PrecruisePlannerShoppingForm form