CheckBoxGroup

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

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

check box group operations

Основы

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

<data>
    <collection id="countriesDc" class="ui.ex1.entity.Country">
        <fetchPlan extends="_local"/>
        <loader id="countriesDl">
            <query>
                <![CDATA[select e from uiex1_Country e]]>
            </query>
        </loader>
    </collection>
</data>
<layout>
    <checkBoxGroup optionsContainer="countriesDc"
                   caption="Countries"/>
</layout>

В данном случае компонент CheckBoxGroup отобразит имена экземпляров сущности Country, находящихся в контейнере countriesDc, а его метод getValue() вернет Collection выбранных экземпляров сущности.

countries check box group

То же самое можно сделать программно:

<data>
    <collection id="countriesDc" class="ui.ex1.entity.Country">
        <fetchPlan extends="_local"/>
        <loader id="countriesDl">
            <query>
                <![CDATA[select e from uiex1_Country e]]>
            </query>
        </loader>
    </collection>
</data>
<layout>
    <checkBoxGroup id="countriesCheckBoxGroup"
                   caption="Countries"/>
</layout>

Обратите внимание, что в приведенном выше XML-дескрипторе optionsContainer не назначался группе флажков countriesCheckBoxGroup. Сделаем это программно в контроллере:

@Autowired
private CheckBoxGroup<Country> countriesCheckBoxGroup;
@Autowired
private CollectionContainer<Country> countriesDc;

@Subscribe
protected void onInit(InitEvent event) {
    countriesCheckBoxGroup.setOptions(new ContainerOptions<>(countriesDc));
}

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

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

Опции

setOptions()

Метод setOptions() принимает одну из реализаций интерфейса Options и позволяет работать со всеми типами опций:

@Autowired
private CheckBoxGroup<Operation> checkBoxGroup;

@Subscribe
protected void onInit(InitEvent event) {
    checkBoxGroup.setOptions(new EnumOptions<>(Operation.class));
}

setOptionsEnum(), setOptionsList() и setOptionsMap() работают так же, как в компоненте ComboBox.

Валидация

Для проверки введенных в компонент CheckBoxGroup значений можно использовать валидатор во вложенном элементе validators.

Для CheckBoxGroup доступны следующие предопределенные валидаторы:

В приведенном ниже примере показано использование SizeValidator для validatedCheckBoxGroup:

<checkBoxGroup id="validatedCheckBoxGroup"
               optionsContainer="customersDc"
               caption="The number of customers is limited from 2 to 5">
    <validators>
        <size min="2" max="5"/>
    </validators>
</checkBoxGroup>

События и слушатели

Чтобы сгенерировать заглушку слушателя в Jmix Studio, выберите компонент в XML-дескрипторе экрана или на панели иерархии Jmix UI и используйте вкладку Handlers на панели инспектора Jmix UI.

В качестве альтернативы вы можете воспользоваться кнопкой Generate Handler на верхней панели контроллера экрана.

ContextHelpIconClickHandler

OptionCaptionProvider

OptionDescriptionProvider

OptionDescriptionProvider используется для генерации всплывающих подсказок для опций компонента CheckBoxGroup.

В приведенном ниже примере показано использование OptionDescriptionProvider для checkBoxGroupDesc:

@Install(to = "checkBoxGroupDesc", subject = "optionDescriptionProvider")
protected String checkBoxGroupDescOptionDescriptionProvider(Customer customer) {
    return "Email: " + customer.getEmail();
}

Чтобы создать его программно, используйте метод компонента setOptionDescriptionProvider().

OptionIconProvider

Validator

Добавляет экземпляр валидатора в компонент. validator должен выбросить ValidationException, если значение недопустимо.

Если вас не устраивают предопределенные валидаторы, добавьте свой собственный экземпляр валидатора:

@Install(to = "validCheckBoxGroup", subject = "validator")
protected void validCheckBoxGroupValidator(Collection<EducationalStage> value) {
    if (value.contains(EducationalStage.NO) & value.size() > 1)
        throw new ValidationException("You cannot select the No Education " +
                "value together with other values");
}

ValueChangeEvent

XML-атрибуты CheckBoxGroup

Просматривать и редактировать атрибуты, применимые к компоненту, можно с помощью панели инспектора Jmix UI в конструкторе экранов Studio.

XML-элемент CheckBoxGroup