Как использовать в или для выбора нескольких элементов?

У меня есть страница Facelets с . В каждой строке есть . Если флажок установлен, объект, расположенный за соответствующей строкой, должен быть установлен в компоненте.

  1. Как мне это сделать?
  2. Как получить выбранные строки или их данные в резервном компоненте?
  3. Или было бы лучше сделать это с помощью ?

Лучше всего привязать значение h:selectBooleanCheckbox с помощью Map где RowId представляет тип идентификатора строки. Давайте предположим, что у вас есть объект Item , идентификатор свойства id которого Long :

     ...   

который должен использоваться в сочетании с:

 public class Item { private Long id; // ... } 

а также

 public class Bean { private Map checked = new HashMap(); private List items; public void submit() { List checkedItems = checked.entrySet().stream() .filter(Entry::getKey) .map(Entry::getValue) .collect(Collectors.toList()); checked.clear(); // If necessary. // Now do your thing with checkedItems. } // ... } 

Вы видите, что карта автоматически заполняется id всех элементов таблицы в качестве ключа, а значение флажка автоматически устанавливается как значение карты, связанное с id элемента в качестве ключа.

В следующем примере я использую флажки для выбора двух или более продуктов, позволяющих пользователю сравнивать спецификации продукта на новой веб-странице с использованием JSF 2.0.

Мне потребовалось немало времени, чтобы найти следующую проблему (совершенно очевидно, конечно, конечно), поэтому подумал, что стоит упомянуть тех, кто пытается использовать разбивку на страницы с приведенным выше кодом BalusC (хороший ответ BalusC, намного проще, чем я когда-либо себе представлял).

Если вы используете разбивку на страницы, вы получите нулевые указатели на линии:

if (checked.get (item.getId ()))

-в приведенном выше кодексе BalusC.

Это связано с тем, что на карту добавлены только отображаемые флажки (doh; slap thebhead). Для тех продуктов, чьи флажки никогда не отображаются, из-за разбиения на страницы эта строка приведет к ошибке с нулевым указателем и должна быть добавлена ​​проверка, чтобы игнорировать эти нулевые указатели (при условии, что все флажки не отмечены при загрузке страницы). Для того, чтобы пользователь установил галочку, необходимо отобразить страницу разбиения на страницы, чтобы после этого все хорошо работало.

Если для загрузки первой страницы требуются некоторые или все флажки, то это не поможет вам … вам придется вручную добавить их на Карту, чтобы они отображались правильно при загрузке страницы ,

Обратите внимание: поскольку я использую объект classа Entity classа из базы данных JPA, мне также необходимо использовать @Transient для id в моем classе Entity Entity, поскольку все переменные считаются столбцами в базе данных JPA по умолчанию, если только префикс @Transient , Также я использую вторую ссылку для сброса флажков, которая вызывает clearSelections (), а мой ‘submit’ – это ссылка, вызывающая compareSelectedProducts (), а не кнопку Submit.

Полный код выглядит следующим образом:

В classе ProductTbl Entity, полученном из базы данных:

 @Transient private Long id; public Long getId() { return id; } public void setId(Long id) { this.id = id; } 

В фонотеке «ProductSelection»:

 private Map checked = new HashMap(); private String errorMessage = ""; // List of all products. private List products; // List of products to compare. private List compareProducts; // Setters and getters for above... public String compareSelectedProducts() { // Reset selected products store. compareProducts = new ArrayList(); for (ProductTbl item: products) { // If there is a checkbox mapping for the current product then... if(checked.get(item.getId()) != null) { // If checkbox is ticked then... if (checked.get(item.getId())) { // Add product to list of products to be compared. compareProducts.add(item); } } } if(compareProducts.isEmpty()) { // Error message that is displayed in the 'ErrorPage.xhtml' file. errorMessage = "No Products selected to compare specifications. Select two or more products by ticking the check box in the second column 'Cmpr'"; return "process_ErrorPage"; } // Rest of code to get product specification data ready to be displayed. return "process_CompareSelected"; } public String clearSelections() { // Untick all checkbox selections. checked.clear(); return "process_MainSearchResult"; } 

На веб-странице JSF «MainSearchResult.xhtml»:

        

В файле «faces-config.xml»:

   process_MainSearchResult /MainSearchResult.xhtml     process_CompareSelected /CompareSelected.xhtml     process_ErrorPage /ErrorPage.xhtml   

Один из способов отправки параметра через – отправить его через заголовок флажка. В ValueChangeListener вы можете получить его из компонента с помощью getAttributes().get("title") . Это помогает в случаях, когда вы хотите отправить значение id в качестве параметра (в отличие от выбранного индекса строки).

  • Метод f: ajax listener в h: selectOneMenu не выполняется
  • Базовые элементы (@ManagedBean) или CDI Beans (@Named)?
  • Что такое библиотека ресурсов JSF и как ее использовать?
  • Почему или не доступен ?
  • Split java.util.Date за два h: поля inputText, представляющие час и минуту с f: convertDateTime
  • Теги JSF не отображаются как HTML
  • Лучший способ добавить параметр «ничего не выбран» в selectOneMenu в JSF
  • Вызывать метод непосредственно перед истечением сеанса
  • Почему selectOneMenu отправляет ItemLabel в конвертер?
  • Как и когда в JSF уничтожается компонент @ViewScoped?
  • Как работают PrimeFaces Selectors как в update = "@ (. MyClass)"?
  • Interesting Posts

    Что это означает в оболочке, когда мы помещаем команду в знак доллара и круглые скобки: $ (команда)

    Почему заголовок JTable не отображается на изображении?

    Восстановить загрузчик без доступных разделов?

    Количество строк с условиями, встречающимися в двух столбцах

    Установка драйверов после переустановки ОС?

    Преобразовать текст camelCaseText в текст предложения

    Вызывает статические методы через объект «плохая форма»? Зачем?

    Что такое файлы .efires в ОС X Lion's Recovery HD?

    Что такое справочный тип данных firestore?

    Угловой провайдер для NameService

    Как браузер загружает изображение с этого URL-адреса?

    Opendirectoryd потребляет 40% процессора

    Я подключен ко ВСЕМ людям, которые в настоящее время загружают / посещают этот файл Bittorrent?

    Невозможно редактировать NSTextField в NSPopover, даже если задано редактируемое поведение

    Adblock Plus не блокирует объявления Google. Как включить?

    Давайте будем гением компьютера.