2013-02-15 2 views
1

У меня есть список информации о продукте в Datatable1 и Список уже отобранной информации о продукте в Datatable2 (который пользователь выбрал из Datatable1 и добавить в dattable2) теперь я хочу, чтобы выполнить одну проверку, которая если пользователь выбран из Datatable1 добавить &, если же данные уже есть в списке, то не должны добавляться в Список DataTable 2 мой друг предложил использоватьизбежать повторяющихся значений в DataTable

HashMap<String ,List<Model>> 

это лучше подход для достижения функциональности ? Thanks

ответ

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

2

Если вы можете использовать java.util.Set реализации, а не List, можно создать дубликат свободного списка Model следующим образом:

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

dataTable2 тогда будет содержать все, что было либо в dataTable1 или dataTable2, но нет дублировать (установить операцию объединения).

Обязательно используйте подходящие equals и hashCode на классе Model.

+0

Вправо, установите только уникальные данные. – zawhtut

+4

Никогда не использовался JSF? До появления JSF 2.2 'Set' не поддерживается как' '. Поэтому вам нужно преобразовать его вперед и назад в/из «Список» каждый раз. – BalusC

+0

Не знал этого, спасибо. – johngirvin

2

Rai прав в случае, если вы хотели бы добавить один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

Спасибо за объяснение скунцеля. – psi

Смежные вопросы