2013-02-15 36 views
1

我的產品信息列表中Datatable1 和Datatable2(其中用戶已經從Datatable1選擇,並加入到dattable2) 名單已選定產品信息的避免重複值 現在我想執行一個檢查是如果用戶選擇了從Datatable1添加&如果相同的數據是已經在列表中存在,那麼不應該被添加到數據表2 我的朋友的名單,建議使用DataTable中

HashMap<String ,List<Model>> 

是更好的方法來實現的功能? 謝謝

回答

1

不要以爲你需要這個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 

因此,只有產品,如果它不存在。

+0

我覺得這很簡單和很好的方法。 – psi 2013-02-15 09:06:26

2

如果你可以使用java.util.Set實現,而不是List,你可以建立的Model一個無重複的名單如下:

Set<Model> dataTable1 = ... 
Set<Model> dataTable2 = ... 
dataTable2.addAll(dataTable1); 

dataTable2然後將包含要麼在​​或dataTable2一切,但沒有重複(設置聯合操作)。

請務必在Model類上實施適當的equalshashCode

+0

對,設置只存儲唯一的數據。 – zawhtut 2013-02-15 08:57:10

+4

從來沒有使用JSF?在即將到來的JSF 2.2之前,'Set'不被支持爲''。所以你必須每次都把它轉換回/從'List'。 – BalusC 2013-02-15 13:25:21

+0

不知道,謝謝。 – johngirvin 2013-02-16 11:14:20

2

清萊是正確的情況下,你想在視圖中添加一個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> 
+0

感謝您的解釋skuntsel。 – psi 2013-02-15 09:20:33