2012-04-10 31 views
0

我在春天mvc 2中有一個窗體。 我的命令類包含一個我需要綁定的複雜地圖。Spring JSP綁定地圖

Map<String, Map<String, Class3>> class2Map; 

在JSP我可以在命令類和Class3的即nameToGet & anyElement3的<c:out>映射值進行迭代。 但是當我嘗試與形式

其綁定我使用

<c:forEach items="${class1.class2List}" var="item" varStatus="itemRow"> 
    <c:forEach var="map" items="${item.class2Map}" varStatus="mapRow"> 
     <c:forEach var="innerMap" items="${map.value}" varStatus="innerMapRow"> 

迭代。我喜歡

<form:input path="class2List[${itemsRow.index}].class2Map[${mapRow.index}].value[0].anyElement3" /> 

結合它拋出異常,像

org.springframework.beans.NotReadablePropertyException: Invalid property 'class1[0].class2Map[0].value[0].anyElement3' of bean class [Class1]: Bean property 'class1[0].class2Map[0].value[0].anyElement3' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter? 

我的課表看起來像

Class1 (Command Class) 
List<Class2> class2List; 
String anyElement1; 

Class2 
Map<String, Map<String, Class3>> class2Map; 
String anyElement2; 

Class3 
Map<String, Class3> class3Map; 
String nameToGet; 
String anyElement3; 

我成功地結合命令類的其它數據成員。我怎樣才能將這張地圖綁定到Spring Form?

+0

請填寫點;它可能有助於獲得更好的建議。 – nobeh 2012-04-10 09:39:56

+0

它包含這樣的::無效屬性'commandClassName [0] .mapName [0] .value [0] .anyElement3'的bean類[commandClassName] – 2012-04-10 09:47:20

+0

你認爲這個想法提到[這裏](http:// blog .vergiss-blackjack.de/2010/04/iterating-over-nested-objects-in-a-spring-form /)可以提供幫助嗎? – nobeh 2012-04-10 11:42:59

回答

0

確保class1對每個字段都有getter和setter。

public Class1{ 
    String nameToGet; 
    String anyElement3; 

    public String getNameToGet(){ 
     return nameToGet; 
    } 

    public void setNameToGet(String nameToGet){ 
     this.nameToGet = nameToGet; 
    } 

    public String getAnyElement3(){ 
     return anyElement3; 
    } 

    public void setAnyElement3(String anyElement3){ 
     this.anyElement3 = anyElement3; 
    } 
} 

還應該有類似的getter和setter方法:

Map<String, Map<String, Class1>> mapName; 
+0

我有所有的getter和setter。 – 2012-04-10 09:45:48

0

在你的表單支持對象,創建要綁定的對象(或多個)。

public class Class1Form{ 
    private String element3; 
    //Other properties needed in your form. 

    public String getElement3(){ 
      return element3; 
    } 

    public setElement3(String element){ 
      element3 = element; 
    } 
    //Other getters and setters. 
} 
+0

是的,我創建了。假設Class1Form是你的命令類。它將包含element3作爲數據成員。它還將包含地圖(由我定義)作爲數據成員。如何綁定該地圖? – 2012-04-10 10:22:29

0

使用的想法提到here,你可以試試這個:

class1[${itemRow.index}].class2Map['${mapRow.current.key}'].anyElement3 

的想法是,循環的mapRow內,現在它遍歷一個地圖,所以每個Map.Entry應該可用。

+0

兩個猜測。 (1)在第二個循環中你有'var =「map」',你應該可以使用'class1 [$ {itemRow.index}] .class2Map ['$ {map.key}']。anyElement3'(2 )由於鍵類型都是'String',所以我相信在鍵的周圍缺少一個''''。 – nobeh 2012-04-11 07:16:15

+0

我得到了同樣的例外。 – 2012-04-11 07:55:41