第1部分: 有一个对象(ObjectA)有另一个对象(ObjectB)。在对象B中有一个Hashmap。这个hashmap有一个字符串作为键,另一个对象“ObjectC”作为值。这个hashmap已经使用s:iterator和s:textfield显示在jsp上,并且正确显示。即,s:textfield中的“values”是正确的,但“name”不是。 现在,修改文本字段时出现问题。我们如何捕获动作类中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>
答案 0 :(得分:0)
在您的情况下, objB 是一个List
,HashMap
,HashMap
,List
的每一个元素。{/ {} p>
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>