我有 Datatable1 中的产品信息列表和 Datatable2 中已选择的产品信息列表(用户已从 Datatable1 中选择并添加到 dattable2)现在我想执行一项检查,即用户是否从 Datatable1 中选择添加 & 如果相同数据已存在于列表中,则不应添加到我的朋友建议使用的数据表 2 列表中
HashMap<String ,List<Model>>
是实现功能的更好方法吗?谢谢
如果您想为每个操作添加一个 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>
如果您可以使用java.util.Set
implementations 而不是List
,则可以构建一个无重复列表,Model
如下所示:
Set<Model> dataTable1 = ...
Set<Model> dataTable2 = ...
dataTable2.addAll(dataTable1);
dataTable2
然后将包含在dataTable1
or中的所有内容dataTable2
,但没有重复项(设置联合操作)。
一定要实现一个合适的equals
和hashCode
上的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
因此,仅当它不存在时才放置产品。