我在我的應用程序中使用JSF2.0。 我的項目中的業務需求是當頁面加載列表顯示時。該列表來自DAO層或Web服務層。讓我們打電話給這個原始列表。 現在我們有2個列表,其中只是原始列表的另一個副本,另一個是有限的JSFJSF不保留原始列表並混合修改後的原始列表或如何在JSF 2.0中執行ArrayList的深層拷貝ModelBean
現在列表是可編輯列表,所以我使用a來顯示列表和每個單元格是一個。 現在點擊保存按鈕,用戶修改的列表(因爲列表可編輯)與原始列表進行比較。 只有當2個列表不同時,修改後的列表纔會被髮送回web服務。 我面臨的問題是,在save()方法本身的第一行中,原始列表和修改列表完全相同,僅指向修改列表。 所以我無法比較2個列表。
我的實現是如下─
的PhaseListener呼籲以下方法在頁面加載
public String populateDataTable() {
this.orderList = new ArrayList<ItemOrder>();
this.originalOrderList = new ArrayList<ItemOrder>();
MockWebService mockService = new MockWebService();
this.setOrderList(mockService.mockWSMethod());
this.originalOrderList = this.getOrderList();//i know this is where i am doing something wrong. i need to deep copy a list. but for this i cannot make an additional web service call and call that web service again and store the list in originalOrderList
return "view";
}
在保存按鈕
public String saveAction() {
boolean isSame = true; // true if same and false if different
for (int i = 0; i < this.originalOrderList.size(); i++) {
if (!this.originalOrderList.get(i).equals(this.orderList.get(i))) {
isSame = false;
}
}
//however both originalOrderList and orderList have the same modified List.
if (isSame == true) {
System.out.println("Same lists");
} else {
System.out.println("Different lists");
}
return "default";
}
請你幫我的點擊。
由於提前, 基蘭