0

spring mvc 2 にフォームがあります。私のコマンド クラスには、バインドする必要がある複雑なマップが含まれています。

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

JSP では、コマンド クラスを繰り返し処理し<c:out>、Class3 の値、つまり nameToGet & anyElement3 をマップできます。しかし、それをフォームにバインドしようとすると

私は使っている

<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 にバインドするにはどうすればよいですか?

4

3 に答える 3

0

ここで述べたアイデアを使用して、これを試すことができますか?

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

アイデアは、のループ内でmapRow、マップを反復処理しているため、それぞれMap.Entryが使用可能である必要があるということです。

于 2012-04-10T13:17:40.993 に答える
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.
}
于 2012-04-10T10:11:51.100 に答える
0

class1 に各フィールドのゲッターとセッターがあることを確認してください。

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

同様のゲッターとセッターも必要です:

Map<String, Map<String, Class1>> mapName;
于 2012-04-10T09:43:26.840 に答える