1

第 1 部分: 有一个对象 (ObjectA) 有另一个对象 (ObjectB)。对象 B 中有一个 Hashmap。这个 hashmap 有一个字符串作为键,另一个对象“ObjectC”作为值。此哈希图已使用 s:iterator 和 s:textfield 显示在 jsp 上,并且显示正确。即 s:textfield 中的“值”是正确的,但“名称”不是。现在,修改文本字段时出现问题。我们如何在动作类的 ObjectC 中捕获修改后的值?

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

jsp代码:

<s:iterator value="#objB.myMap" var="fieldMap" status="fieldStatus">

<li><label><s:property value="#fieldMap.key"/></label><span>
<s:textfield name="<NOT SURE>" value="%{#fieldMap.value.attr12}"  /></span></li>



</s:iterator> 
4

1 回答 1

0

在您的情况下,objB是一个List包含一个HashMap,然后一个HashMap用于List.

objA
  |--- objB[0]
    |-- objC[A]
    |-- objC[B]
    |-- objC[C]
  |--- objB[1]
    |-- objC[X]
    |-- objC[Y]
    |-- objC[Z]
  |--- objB[n]
    |-- objC[N1]
    |-- objC[N2]
    |-- objC[N3]

然后,您需要两个迭代器和以下OGNL符号来引用具有name属性的单个元素:

<s:iterator value="objA.objB" var="listRow" status="listStatus">
<!-- Iterating the List -->
    <s:iterator value="#listRow.myMap" var="mapRow" >
    <!-- Iterating the Map -->
        <li>
            <label>
                <s:property value="#mapRow.key"/>
            </label>
            <span>
                <s:textfield value="%{#mapRow.value.attr12}"  
                  name="objA.objB[#listStatus.index].myMap[#mapRow.key].attr112"
                />
            </span>
        </li>
    </s:iterator> 
</s:iterator> 
于 2013-02-19T15:33:19.590 回答