3.5.2.1.8. CheckBoxGroup

Компонент, который обеспечивает выбор нескольких значений из списка опций, используя группу флажков (чекбоксов).

gui CheckBoxGroup

XML-имя компонента: checkBoxGroup.

Компонент CheckBoxGroup реализован для блока Web Client.

Список опций для компонента можно указать с помощью методов setOptions(), setOptionsList(), setOptionsMap() и setOptionsEnum(), а также атрибута optionsContainer.

  • Простейший вариант использования CheckBoxGroup - выбор значения перечисления (enumeration). К примеру, сущность Role имеет атрибут type типа RoleType, который является перечислением. Тогда для отображения этого атрибута можно использовать CheckBoxGroup следующим образом, с помощью атрибута optionsEnum:

    <checkBoxGroup optionsEnum="com.haulmont.cuba.security.entity.RoleType"
                   property="type"/>

    Метод setOptionsEnum() принимает в качестве параметра класс перечисления. Список опций будет состоять из локализованных названий значений перечисления, значением компонента будет являться выбранное значение перечисления.

    @Inject
    private CheckBoxGroup<RoleType> checkBoxGroup;
    
    @Subscribe
    protected void onInit(InitEvent event) {
        checkBoxGroup.setOptionsEnum(RoleType.class);
    }

    Того же результата можно достигнуть, используя метод setOptions(), который позволяет работать со всеми типами опций:

    @Inject
    private CheckBoxGroup<RoleType> checkBoxGroup;
    
    @Subscribe
    protected void onInit(InitEvent event) {
        checkBoxGroup.setOptions(new EnumOptions<>(RoleType.class));
    }
  • setOptionsList() позволяет программно задать список опций компонента. Для этого объявляем компонент в XML-дескрипторе:

    <checkBoxGroup id="checkBoxGroup"/>

    Затем инжектируем компонент в контроллер и задаем ему список опций:

    @Inject
    private CheckBoxGroup<Integer> checkBoxGroup;
    
    @Subscribe
    protected void onInit(InitEvent event) {
        List<Integer> list = new ArrayList<>();
        list.add(2);
        list.add(4);
        list.add(5);
        list.add(7);
        checkBoxGroup.setOptionsList(list);
    }

    Компонент примет следующий вид:

    gui CheckBoxGroup 2

    При этом метод getValue() компонента в зависимости от выбранной опции будет возвращать Integer значения 2, 4, 5, 7.

  • setOptionsMap() позволяет задать строковые названия и значения опций по отдельности. Например, для инжектированного в контролллер экрана компонента checkBoxGroup задаём мэп опций:

    @Inject
    private CheckBoxGroup<Integer> checkBoxGroup;
    
    @Subscribe
    protected void onInit(InitEvent event) {
        Map<String, Integer> map = new LinkedHashMap<>();
        map.put("two", 2);
        map.put("four", 4);
        map.put("five", 5);
        map.put("seven", 7);
        checkBoxGroup.setOptionsMap(map);
    }

    Компонент примет следующий вид:

    gui CheckBoxGroup 3

    При этом метод getValue() компонента в зависимости от выбранной опции будет возвращать Integer значения 2, 4, 5, 7, а не строки, отображаемые на экране.

  • Компонент может принимать список опций из data container. Для этого используется атрибут optionsContainer. Например:

    <data>
        <collection id="employeesCt" class="com.company.demo.entity.Employee" view="_minimal">
            <loader>
                <query><![CDATA[select e from demo_Employee e]]></query>
            </loader>
        </collection>
    </data>
    <layout>
        <checkBoxGroup optionsContainer="employeesCt"/>
    </layout>

    В данном случае компонент checkBoxGroup отобразит имена экземпляров сущности Employee, находящихся в контейнере employeesCt, а его метод getValue() вернёт выбранный экземпляр сущности.

    gui CheckBoxGroup 4

    С помощью атрибута captionProperty можно указать, какой атрибут сущности использовать вместо имени экземпляра для строковых названий опций.

    Программно можно задать options container для компонента с помощью метода setOptions() интерфейса CheckBoxGroup:

    @Inject
    private CheckBoxGroup<Employee> checkBoxGroup;
    @Inject
    private CollectionContainer<Employee> employeesCt;
    
    @Subscribe
    protected void onInit(InitEvent event) {
        checkBoxGroup.setOptions(new ContainerOptions<>(employeesCt));
    }

OptionDescriptionProvider используется для генерации всплывающих подсказок. Для создания подсказок вы можете использовать как метод setOptionDescriptionProvider(), так и аннотацию @Install:

@Inject
private CheckBoxGroup<Product> checkBoxGroup;

@Subscribe
public void onInit(InitEvent event) {
    checkBoxGroup.setOptionDescriptionProvider(product -> "Price: " + product.getPrice());
}
@Install(to = "checkBoxGroup", subject = "optionDescriptionProvider")
private String checkBoxGroupOptionDescriptionProvider(Experience experience) {
    switch (experience) {
        case HIGH:
            return "Senior";
        case COMMON:
            return "Middle";
        default:
            return "Junior";
    }
}

Атрибут orientation задаёт расположение элементов группы. По умолчанию элементы располагаются по вертикали. Значение horizontal задаёт горизонтальное расположение.