存在一個對象(ObjectA),其中有另一個對象(ObjectB)。對象B中有一個Guava TreeBasedTable
。此表具有一個字符串作爲行鍵,列鍵和另一個對象「ObjectC」作爲值。該表已使用<s:iterator/>
和<s:textfield/>
標籤在jsp上顯示,並且它正確顯示(<s:textfield/>
中的「值」是正確的,但「名稱」不是)。struts 2:捕獲操作中的番石榴表(TreeBasedTable)的修改
現在,問題出現在<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 Table<String,String,ObjectC> allPFields;
// ...getters and setters....
public class ObjectC implements Serializable {
private Integer attr111;
public String attr112;
// ...getters and setters....
JSP代碼:
<!-- language: lang-html -->
<s:iterator value="#objB.allPlainFields.row(#rowKey)" 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>
一個TreeBasedTable
在Guava
類似於地圖的地圖裏面,我試圖做allPFields[#outerkey][#innerkey].attr112
,但沒有奏效。
目的結構當屏幕被在數據庫
<!-- language: lang-java -->
objA
objBList ArrayList<E> (id=668)
elementData Object[10] (id=7438)
[0] objB (id=7439)
allPFields TreeBasedTable<R,C,V> (id=7443)
backingMap TreeMap<K,V> (id=8116)
cellSet null
columnComparator NaturalOrdering (id=503)
columnKeySet null
columnMap null
factory TreeBasedTable$Factory<C,V> (id=8117)
rowKeySet null
rowKeySet StandardRowSortedTable$RowKeySortedSet (id=8118)
rowMap StandardRowSortedTable$RowSortedMap (id=8119)
rowMap null
values null
與「allPFields」顯示與現有的值看起來像在動作如下:
{OuterKey1=
{InnerKey1=ObjectC[attr111=31, attr112=Hi there],
InnerKey2=ObjectC[attr111=40, attr112=How are you]
}
}
上面的「allPFields」值已從IDE控制檯中選取。
試過這個,但沒有工作:'
'....不知何故,我一直無法讓方法使用OGNL。在我使用方法的那一刻,對象(ObjB)被髮送爲空。 – Vickym 2013-02-20 11:16:36啊......你有沒有在Struts.xml中禁用「動態方法調用」(如果是的話,重新啓用它)?你是否驗證過ObjectB中的getter是getAllPFields還是getAllPlainFields? – 2013-02-20 11:22:34
是的,'動態方法調用'被設置爲false ..我已經啓用它...讓我現在檢查。 – Vickym 2013-02-20 11:33:50