valuePicker
valuePicker отображает значение любого типа. Он состоит из текстового поля и набора кнопок, определяемых действиями.
| XML-элемент | 
 | 
|---|---|
| Java-класс | 
 | 
| Атрибуты | id - alignSelf - allowCustomValue - ariaLabel - ariaLabelledBy - autofocus - classNames - colspan - css - dataContainer - enabled - errorMessage - focusShortcut - height - helperText - label - maxHeight - maxWidth - minHeight - minWidth - placeholder - property - readOnly - required - requiredMessage - tabIndex - themeNames - title - visible - width | 
| Обработчики | AttachEvent - BlurEvent - ComponentValueChangeEvent - CustomValueSetEvent - DetachEvent - FocusEvent - formatter - statusChangeHandler - validator | 
| Элементы | 
Основы
Компонент чаще всего используют для выбора сложных значений, то есть значений, выбор которых подразумевает какое-то действие.
 
Пример определения valuePicker c label и двумя действиями:
<valuePicker id="valuePicker" label="Code">
    <actions>
        <action id="generate" icon="REFRESH"/>
        <action id="valueClear" type="value_clear"/>
    </actions>
</valuePicker>Чтобы создать valuePicker, связанный с данными, используйте атрибуты dataContainer и property:
<data>
    <instance class="com.company.onboarding.entity.Step" id="stepDc"> (1)
        <fetchPlan extends="_base"/> (2)
        <loader id="stepDl"/>
    </instance>
</data>
<layout>
    <valuePicker label="msg://com.company.onboarding.entity/Step.name"
                 dataContainer="stepDc"
                 property="name"> (3)
        <actions>
            <action id="lookup" icon="ELLIPSIS_DOTS_H"/>
            <action id="valueClear" type="value_clear"/>
        </actions>
    </valuePicker>
</layout>| 1 | InstanceContainerдля сущностиStep. | 
| 2 | Встроенный план выборки экземпляра сущности, находящегося в контейнере. | 
| 3 | Привязка компонента к контейнеру данных и свойству. Атрибут dataContainerсодержит ссылку на контейнер данныхstepDc, а атрибутpropertyссылается на атрибут сущностиname. | 
Действия
Вы можете определить пользовательские и предопределенные действия для valuePicker, которые отображаются в виде кнопок справа. Это можно сделать либо в XML-дескрипторе, используя вложенный элемент actions, либо программно в контроллере, используя метод addAction().
| Чтобы добавить действие в Jmix Studio, выберите компонент в XML-дескрипторе экрана или в панели структуры Jmix UI и нажмите кнопку Add в панели инспектора Jmix UI. | 
Предопределенные
Фреймворк предоставляет только одно предопределенное действие - value_clear:
<action id="valueClear" type="value_clear"/>Используйте атрибуты type и id для объявления предопределенного действия в XML.
Используйте addAction() для установки предопределенного действия программно:
@ViewComponent
private JmixValuePicker<String> loginValuePicker;
@Autowired
private Actions actions;
@Subscribe
public void onInit(InitEvent event) {
    loginValuePicker.addAction(actions.create(ValueClearAction.ID));
}Пользовательские
Чтобы определить пользовательское действие в XML, используйте вложенный элемент actions. Укажите атрибуты id и icon для действия:
<valuePicker id="generateLoginPicker" label="Login">
    <actions>
        <action id="valueClear" type="value_clear"/>
        <action id="generate" icon="REFRESH"/>
    </actions>
</valuePicker>Затем реализуйте пользовательскую логику в контроллере экрана, подписавшись на событие ActionPerformedEvent:
@ViewComponent
private JmixValuePicker<String> generateLoginPicker;
@Subscribe("generateLoginPicker.generate")
public void onGenerateLoginPickerGenerate(ActionPerformedEvent event) {
    generateLoginPicker.setValue(RandomStringUtils.randomAlphabetic(5, 10));
}Обработка пользовательского ввода
valuePicker позволяет вам настроить его для принятия пользовательских значений.
Когда атрибут allowCustomValue установлен в true, пользователи могут вводить произвольные строковые значения. Это приводит к событию CustomValueSetEvent.
| valuePickerавтоматически не обрабатывает строку с пользовательским значением. Используйте событиеCustomValueSetEvent, чтобы определить, как следует обработать введенное пользователем значение. | 
Пример обработки пользовательского ввода:
@Autowired
private Notifications notifications;
@ViewComponent
private JmixValuePicker<String> vPicker;
@Subscribe("vPicker")
public void onVPickerCustomValueSet(
        CustomValueSetEvent<JmixValuePicker<String>, Object> event) {
    String text = event.getText(); (1)
    notifications.create("Entered value: " + text)
            .show();
    if (!Strings.isNullOrEmpty(text))
        vPicker.setValue(text); (2)
}| 1 | Получите значение ввода пользователя как строку. | 
| 2 | Установите это значение в vPicker. | 
Форматер
Добавляет экземпляр форматера к компоненту.
В примере ниже мы покажем использование форматера для vPicker:
@Install(to = "vPicker", subject = "formatter")
private String vPickerFormatter(String value) {
    return value != null ? "Code: " + value : null;
}Чтобы добавить форматер программно, используйте метод компонента setFormatter().
Валидация
Чтобы проверить значения, введенные в компонент valuePicker вы можете использовать валидатор в элементе validators.
Доступны следующие предопределенные валидаторы для valuePicker:
| XML-элемент | 
 | 
|---|---|
| Предопределенные валидаторы | custom - decimalMax - decimalMin - digits - doubleMax - doubleMin - email - max - min - negativeOrZero - negative - notBlank - notEmpty - notNull - positiveOrZero - positive - regexp - size | 
Атрибуты
В Jmix есть множество общих атрибутов, которые выполняют одну и ту же функцию для всех компонентов.
Ниже приведены атрибуты, специфичные для valuePicker.
| Название | Описание | Значение по умолчанию | 
|---|---|---|
| По умолчанию пользователи не могут вручную вводить значения в поле  | 
 | 
Обработчики
В Jmix существует множество общих обработчиков, которые конфигурируются одинаково для всех компонентов.
Ниже приведены обработчики, специфичные для valuePicker.
| Чтобы сгенерировать заглушку обработчика в Jmix Studio, используйте вкладку Handlers панели инспектора Jmix UI, или команду Generate Handler, доступную на верхней панели контроллера экрана и через меню Code → Generate (Alt+Insert / Cmd+N). | 
| Название | Описание | 
|---|---|
| Событие  | |
| Добавляет экземпляр форматера к компоненту. Смотрите Форматер. |