ObjectA
のリストを持つオブジェクトがありますObjectB
。TreeMap
中にありObjectB
ます。これTreeMap
には、String
キーとしてのキーと、値としてList
の別のオブジェクトのがありObjectC
ます。これTreeMap
とlist
内部はとをjsp
使用して表示されてs:iterator
おり、s:textfield
正しく表示されています。つまり、s:textfield内の「値」は正しいです。ここで、テキストフィールドが変更されたときに問題が発生します。アクションクラスのObjectC内で変更された値をキャプチャするにはどうすればよいですか?ここに示すコードでは、キー( "Key1")がアクションに含まれていますが、値はnullです。
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">
日食の「変数」ビューのオブジェクト構造は次のことを示しています。
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の「変数」ビューでは、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
が呼び出されます。マップはここに記載されているように印刷されます:
public String updateTreeMap(){
for (Map.Entry<String, ObjectCList> entry : testTreeMap.entrySet())
{
System.out.println(entry.getKey() + "/" + entry.getValue());
}
return SUCCESS;
}
「印刷」とは:mykey1 /mykey2/つまりnull値
以下の画面は、jspで入力される値を示しています