Struts2: Aktualizacja wartości „Listy obiektów” wewnątrz mapy

Jest obiektObjectA który ma listęObjectB. Tam jestTreeMap w środkuObjectB. ToTreeMap maString jako klucz i aList innego obiektuObjectC jako wartość. ToTreeMap ilist wewnątrz został wyświetlony najsp używającs:iterator is:textfield i jest wyświetlany poprawnie. tj. „wartości” wewnątrz pola tekstowego s: są poprawne. Teraz problem pojawia się, gdy pole tekstowe jest modyfikowane. Jak przechwycić zmodyfikowane wartości w ObjectC w klasie akcji? Z podanym kodem klucz („Klucz1”) pojawia się w akcji, ale wartość jest null.

Kod Java

public class ObjectA implements Serializable {
private Integer attr1;
private List<ObjectB> objB;
//...getters and setters....
public class ObjectB implements Serializable {
private Integer attr11;
private TreeMap<String,List<ObjectC>> allPlainFields;
// ...getters and setters....
public class ObjectC implements Serializable {
private Integer attr111;
public String attr112;
// ...getters and setters....

Kod JSP

<s:iterator value="objA.objB" var="currentObjB" status="currentGroupStatus">

  <s:iterator value="#currentObjB.allPlainFields" var="parentMap" status="headerStatus">
     <s:iterator value="#parentMap.value" var="fieldList" status="fieldStatus">

       <s:textfield  name="objA.objB[%{#currentGroupStatus.index}].allPlainFields['%{#parentMap.key}'][%{#fieldStatus.index}].attr112"/>


</s:iterator>                       

 </s:iterator> 

HTML renderowany: <input type="text" id="review-act1_objA_objB_0__allPlainFields_'Key1'__6__attr112" value="Correct Value" name="objA.objB[0].allPlainFields['Key1'][0].attr112">

Struktura obiektu w widoku „VAriables” pokazuje zaćmienie:

objA    Object A  (id=955)  
objB    ArrayList<E>  (id=966)  
    elementData Object[10]  (id=967)    
        [0] ObjectB  (id=968)   
            allPlainFields  TreeMap<K,V>  (id=972)  
                comparator  null    
                descendingMap   null    
                entrySet    TreeMap$EntrySet  (id=979)  
                keySet  null    
                modCount    1   
                navigableKeySet null    
                root    TreeMap$Entry<K,V>  (id=980)    
                size    1   
                values  null    

        [1] ObjectB  (id=969)   
        [2] ObjectB  (id=970)   
        [3] ObjectB  (id=971)   
        [4] null    
        [5] null    
        [6] null    
        [7] null    
        [8] null    
        [9] null    
    modCount    4   
    size    4   

**** W widoku Eclipse „Variables” wartość dla allPlainFields wynosi **: ** {Key1 =}

EDYTUJ (27.02.2013):

Próbowałem tego, ale nie działa. Wartości pojawiają się na jsp, ale po przesłaniu nie wchodzą w działanie:

WAction klasa:

private TreeMap<String,ObjectCList> testTreeMap = new TreeMap<String,ObjectCList>();
//get,set and setting two keys in map "mykey1" and "mykey2"

WObjectCList klasa:

private ArrayList<ObjectC> paramMdlList;
 //default constructor, get, set

WJSP:

<s:form id="test-map" method="post">
<s:iterator value="testTreeMap" var="pMap" status="hStatus">
     <li><label><s:property value="%{#pMap.key}" /></label> 
        <s:iterator value="%{#pMap.value.paramMdlList}" var="pList" status="innerStatus">
            <s:textfield name="testTreeMap['%{#pMap.key}'].paramMdlList[%{#innerStatus.index}].attr111"/>
            <s:textfield name="testTreeMap['%{#pMap.key}'].paramMdlList[%{#innerStatus.index}].attr112"/> 

        </s:iterator>


    </li>

</s:iterator>
<s:submit value=" " type='button' id="btnh1" action="saveTreeMap">
            <span>Save TreeMap</span>
</s:submit>
</s:form>

Po przesłaniu formularzaupdateTreeMap metodaaction jest nazywany. Mapa jest drukowana jak wspomnianotutaj :

public String updateTreeMap(){

    for (Map.Entry<String, ObjectCList> entry : testTreeMap.entrySet())
    {
        System.out.println(entry.getKey() + "/" + entry.getValue());
    }

    return SUCCESS;

}

Co jest „drukowane”: mykey1 / mykey2 / i.e.wartości null

Poniższy ekran pokazuje wartości w jsp

questionAnswers(2)

yourAnswerToTheQuestion