我的產品信息列表中Datatable1 和Datatable2(其中用戶已經從Datatable1選擇,並加入到dattable2) 名單已選定產品信息的避免重複值 現在我想執行一個檢查是如果用戶選擇了從Datatable1添加&如果相同的數據是已經在列表中存在,那麼不應該被添加到數據表2 我的朋友的名單,建議使用DataTable中
HashMap<String ,List<Model>>
是更好的方法來實現的功能? 謝謝
我的產品信息列表中Datatable1 和Datatable2(其中用戶已經從Datatable1選擇,並加入到dattable2) 名單已選定產品信息的避免重複值 現在我想執行一個檢查是如果用戶選擇了從Datatable1添加&如果相同的數據是已經在列表中存在,那麼不應該被添加到數據表2 我的朋友的名單,建議使用DataTable中
HashMap<String ,List<Model>>
是更好的方法來實現的功能? 謝謝
不要以爲你需要這個HashMap; List or Set
將完成這項工作。
List<Product> list1 = new ArrayList<Product>(); //from DataTable1
List<Product> list2 = new ArrayList<Product>(); //from Datatable2
Product p; //product which needs to be added to list2
if(!list2.contains(p)){
list2.add(p);
}
//write list2 to db
因此,只有產品,如果它不存在。
如果你可以使用java.util.Set
實現,而不是List
,你可以建立的Model
一個無重複的名單如下:
Set<Model> dataTable1 = ...
Set<Model> dataTable2 = ...
dataTable2.addAll(dataTable1);
dataTable2
然後將包含要麼在或dataTable2
一切,但沒有重複(設置聯合操作)。
請務必在Model
類上實施適當的equals
和hashCode
。
對,設置只存儲唯一的數據。 – zawhtut 2013-02-15 08:57:10
從來沒有使用JSF?在即將到來的JSF 2.2之前,'Set'不被支持爲'
不知道,謝謝。 – johngirvin 2013-02-16 11:14:20
清萊是正確的情況下,你想在視圖中添加一個Product
每個動作,如(通過迭代組件包圍)
<h:commandButton value="Add to selected" actionListener="#{bean.addProductToList2}>
<f:setPropertyActionListener value="#{product}" target="#{bean.selectedProduct}/>
<f:ajax render="table2/>
</h:commandButton>
與
private Product selectedProduct;
public void addProductToList2(ActionEvent event) {
if(!list2.contains(selectedProduct)){
list2.add(selectedProduct);
}
}
而且,他是正確的選擇兩個名單。
如果你想添加將所有選中的產品一次,你可以使用複選框代替
<h:selectBooleanCheckbox valueChangeListener="#{bean.toggleProductInList2}">
<f:setPropertyActionListener value="#{product}" target="#{bean.selectedProduct}/>
</h:selectBooleanCheckbox>
與
private Product selectedProduct;
public void toggleProductInList2(ValueChangeEvent event) {
Boolean isChecked = (Boolean) event.getNewValue();
if(isChecked){
list2.add(selectedProduct);
} else {
list2.remove(selectedProduct);
}
}
這樣一個名單將準備和可能的可能性顯示在按鈕上點擊:
<h:commandButton value="Show selected">
<f:ajax render="table-container"/>
</h:commandButton>
<h:panelGroup id="table-container">
<ui:repeat...>
</ui:repeat>
</h:panelGroup>
感謝您的解釋skuntsel。 – psi 2013-02-15 09:20:33
我覺得這很簡單和很好的方法。 – psi 2013-02-15 09:06:26