gpt4 book ai didi

java - Struts2:更新 Map 中 "List Of Objects"的值

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:55:58 26 4
gpt4 key购买 nike

有一个对象ObjectA其中有一个列表 ObjectB .有一个 TreeMapObjectB里面.这TreeMap有一个 String作为键和一个 List另一个对象 ObjectC作为值(value)。这TreeMaplist里面已经显示在了jsp上使用 s:iterators:textfield并且显示正确。即 s:textfield 中的“值”是正确的。现在,问题出现在修改文本字段时。我们如何在 Action 类中捕获 ObjectC 内部的修改值?使用此处给出的代码,键(“Key1”)出现在操作中,但值为空。

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....

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: <input type="text" id="review-act1_objA_objB_0__allPlainFields_'Key1'__6__attr112" value="Correct Value" name="objA.objB[0].allPlainFields['Key1'][0].attr112">

eclipse的“VAriables” View 中的对象结构显示:

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

****在 Eclipse“变量” View 中,allPlainFields 的值为**:** {Key1=}

编辑(2013 年 2 月 27 日):

试过了,但没有用。这些值出现在 jsp 上,但在提交时,它们没有生效:

Action类:

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

ObjectCList类:

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

JSP :

<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 action 的方法叫做。 map 打印如前所述here :

public String updateTreeMap(){

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

return SUCCESS;

什么是“打印”: 我的 key 1/ 我的 key 2/即空值

下面的屏幕显示了来自 jsp 的值 screen showing values come in jsp

最佳答案

根据您的最新更新。如果您正在使用 TreeMap,Struts2 无法正确确定其中元素的类型。将 testTreeMap 的声明从 TreeMap 更改为 Map

private Map<String,ObjectCList> testTreeMap = new TreeMap<String,ObjectCList>();

或者用com.opensymphony.xwork2.util.Element注解来注解testTreeMap来告诉Struts2 map 中的元素是什么类型。

@Element(value = ObjectCList.class)
private TreeMap<String,ObjectCList> testTreeMap = new TreeMap<String,ObjectCList>();

关于java - Struts2:更新 Map 中 "List Of Objects"的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15006868/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com