Struts2:更新“对象列表”的值。里面的地图 [英] Struts2: Updating the values of a "List Of Objects" inside a Map
问题描述
有一个对象 ObjectA
,它有一个 ObjectB
的列表。在 ObjectB
内有一个 TreeMap
。此 TreeMap
有一个 String
作为键和列表
另一个对象 ObjectC
作为值。此 TreeMap
和列表
已显示在 jsp
使用 s:iterator
和 s:textfield
,它正在正确显示。即s:textfield中的values是正确的。现在,当文本字段被修改时出现问题。我们如何捕获ActionClass中ObjectC中修改的值?使用此处给出的代码,键(Key1)在操作中,但值为null。
There is an object ObjectA
which has a list of ObjectB
. There is a TreeMap
inside the ObjectB
. This TreeMap
has a String
as key and a List
of another object ObjectC
as value. This TreeMap
and the list
inside has been displayed on the jsp
using the s:iterator
and s:textfield
and it is being displayed correctly. i.e. the "values" inside the s:textfield are correct. Now, the problem arises when the textfield is modified. How do we capture the modified values inside ObjectC in the action class? With the code given here, the key ("Key1") comes in the action but the value is null.
Java代码 >
Java Code
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....
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>
< input type =textid =review-act1_objA_objB_0__allPlainFields_'Key1'__ 6__attr112value =Correct Valuename =objA.objB [0] .allPlainFields ['Key1'] [0] .attr112>
VAriables视图中的对象结构:
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
***在EclipseVariables视图中,allPlainFields的值为**:** {Key1 =}
****In the Eclipse "Variables" view, the value for allPlainFields is**:** {Key1=}
):
试过了,但没有工作。这些值出现在jsp上,但是在提交时,它们不起作用:
Tried this but didn't work. The values appear on jsp but when submitted, they don't come in action:
在 Action
class: / p>
In Action
class:
private TreeMap<String,ObjectCList> testTreeMap = new TreeMap<String,ObjectCList>();
//get,set and setting two keys in map "mykey1" and "mykey2"
ObjectCList
class:
private ArrayList<ObjectC> paramMdlList;
//default constructor, get, set
/ code>:
<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>
提交表单时, updateTreeMap
方法的动作
被调用。将按照此处所述打印地图:
When the form is submitted, updateTreeMap
method of the action
is called. The map is printed as mentioned here :
public String updateTreeMap(){
for (Map.Entry<String, ObjectCList> entry : testTreeMap.entrySet())
{
System.out.println(entry.getKey() + "/" + entry.getValue());
}
return SUCCESS;
}
:
mykey1 /
mykey2 /
即空值
进入jsp
推荐答案
根据您的最新更新。如果您使用 TreeMap
Struts2无法正确确定其中的元素类型。将 testTreeMap
的变更声明从 TreeMap
更改为映射
p>
According to your latest update. If you are using TreeMap
Struts2 cannot correctly determine type of elements inside it. Change declaration of testTreeMap
from TreeMap
to Map
.
private Map<String,ObjectCList> testTreeMap = new TreeMap<String,ObjectCList>();
或注释 testTreeMap
c> com.opensymphony.xwork2.util.Element 注释告诉Struts2 map中的元素是什么类型。
Or annotate testTreeMap
with com.opensymphony.xwork2.util.Element
annotation to tell Struts2 what type are elements inside map.
@Element(value = ObjectCList.class)
private TreeMap<String,ObjectCList> testTreeMap = new TreeMap<String,ObjectCList>();
这篇关于Struts2:更新“对象列表”的值。里面的地图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!