1

我有 Datatable1 中的产品信息列表和 Datatable2 中已选择的产品信息列表(用户已从 Datatable1 中选择并添加到 dattable2)现在我想执行一项检查,即用户是否从 Datatable1 中选择添加 & 如果相同数据已存在于列表中,则不应添加到我的朋友建议使用的数据表 2 列表中

 HashMap<String ,List<Model>>

是实现功能的更好方法吗?谢谢

4

3 回答 3

2

如果您想为每个操作添加一个 Product,Rai 是正确的,例如在视图中(由迭代组件包围)

<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>
于 2013-02-15T09:05:15.417 回答
2

如果您可以使用java.util.Setimplementations 而不是List,则可以构建一个无重复列表,Model如下所示:

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

dataTable2然后将包含在dataTable1or中的所有内容dataTable2,但没有重复项(设置联合操作)。

一定要实现一个合适的equalshashCode上的Model类。

于 2013-02-15T08:45:47.790 回答
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

因此,仅当它不存在时才放置产品。

于 2013-02-15T08:30:56.567 回答