textField
textField — поле ввода для редактирования текста или значений других поддерживаемых типов данных.
XML-элемент |
|
|---|---|
Java-класс |
|
Основы
В следующем примере определены стандартное текстовое поле и поле с ограничением максимальной длины ввода:
<textField id="textField" label="TextField"/>
<textField id="textLengthField" label="MaxLength = 10" maxLength="10"/>
Текстовые поля с разными типами данных
textField — типизированный компонент, поэтому он поддерживает значения разных типов. Тип определяется при привязке компонента к атрибуту сущности или задаётся явно атрибутом datatype.
<textField id="stringTextField" label="String"
datatype="string"/>
<textField id="integerTextField" label="Integer"
datatype="int"/>
<textField id="doubleTextField" label="Double"
datatype="double"/>
Для работы с типизированными значениями также предназначены методы setTypedValue() и getTypedValue(). Они позволяют задать или получить значение конкретного типа, например Integer или Long.
При обработке изменений значений компонента рекомендуется использовать TypedValueChangeEvent вместо ComponentValueChangeEvent. Такой подход гарантирует корректность типа значения и исключает необходимость дополнительных преобразований или проверок.
textField связанный с данными
Чтобы связать textField с данными, используйте атрибуты dataContainer и property.
<data>
<instance id="customerDc"
class="io.jmix.uisamples.entity.Customer"
fetchPlan="_local"/>
</data>
<layout>
<textField id="textField" label="Name"
dataContainer="customerDc" property="name"/>
<hbox>
<span text="Value in the container:"/>
<span id="spanValue"/>
</hbox>
</layout>
@ViewComponent
protected InstanceContainer<Customer> customerDc;
@ViewComponent
protected Span spanValue;
@Autowired
protected Metadata metadata;
@Subscribe
protected void onInit(InitEvent event) {
Customer customer = metadata.create(Customer.class);
customer.setName("John");
customerDc.setItem(customer);
}
@Subscribe("textField")
protected void onTextFieldValueChange(TypedValueChangeEvent<TypedTextField<String>, String> changeEvent) {
spanValue.setText(customerDc.getItem().getName());
}
В приведённом выше примере экран описывает контейнер данных departmentDc для сущности Department, которая содержит атрибут name. Компонент textField связан с контейнером через атрибут dataContainer; атрибут property содержит имя атрибута сущности, отображаемого в textField
Режимы изменения значений
Атрибут valueChangeMode определяет, когда введённые данные обновляют значение на стороне сервера. В примере обработчик изменения значения также обновляет вспомогательный текст по мере ввода.
<details summaryText="Default value change" opened="true" width="AUTO">
<textField id="textField" placeholder="Start typing"/>
</details>
<details summaryText="Custom value change" opened="true" width="50%">
<vbox padding="false">
<textField id="valueChangeModeTextField" maxLength="140" helperText="0/140"/>
<radioButtonGroup id="valueChangeModeRadioButtonGroup" label="ValueChangeMode"/>
</vbox>
</details>
@ViewComponent
protected TypedTextField<String> valueChangeModeTextField;
@ViewComponent
protected JmixRadioButtonGroup<ValueChangeMode> valueChangeModeRadioButtonGroup;
@Autowired
protected Notifications notifications;
@Subscribe
protected void onInit(InitEvent event) {
ComponentUtils.setItemsMap(valueChangeModeRadioButtonGroup, getValueChangeModeItemsMap());
valueChangeModeRadioButtonGroup.setValue(ValueChangeMode.ON_CHANGE);
}
@Subscribe("valueChangeModeRadioButtonGroup")
protected void onValueChangeModeRadioButtonValueChange(
ComponentValueChangeEvent<JmixRadioButtonGroup<ValueChangeMode>, ValueChangeMode> event) {
valueChangeModeTextField.setValueChangeMode(event.getValue());
}
@Subscribe("textField")
protected void onTextFieldValueChange(TypedValueChangeEvent<TypedTextField<String>, String> event) {
notifications.show("Text Changed: " + event.getValue());
}
@Subscribe("valueChangeModeTextField")
protected void onValueChangeModeTextFieldValueChange(TypedValueChangeEvent<TypedTextField<String>, String> event) {
TypedTextField<String> sourceTextField = event.getSource();
sourceTextField.setHelperText(Strings.nullToEmpty(event.getValue()).length() + "/" + sourceTextField.getMaxLength());
}
protected Map<ValueChangeMode, String> getValueChangeModeItemsMap() {
return Arrays.stream(ValueChangeMode.values())
.collect(Collectors.toMap(Function.identity(), mode -> mode.name().replace('_', ' ')));
}
Проверка
Добавьте вложенные валидаторы для проверки преобразованных значений поля. В примере стандартные валидаторы числового диапазона используются вместе с пользовательским валидатором — Spring-бином.
<textField id="integerTextField" label="Positive TextField"
helperText="Value must be positive"
datatype="int">
<validators>
<custom bean="uisamples_PositiveIntegerValidator"/>
</validators>
</textField>
<textField id="doubleTextField" label="Double range validator"
helperText="Value must be between 1.0 and 100.0"
datatype="double">
<validators>
<doubleMin value="1.0" inclusive="true"/>
<doubleMax value="100.0" inclusive="true"/>
</validators>
</textField>
@Override
public void accept(Integer value) {
if (value != null) {
if (value <= 0) {
fireValidationException(
messages.getMessage("validation.constraints.positive"),
ParamsMap.of("value", value)
);
}
}
}
Варианты темы
Используйте атрибут themeNames, чтобы применить один или несколько вариантов темы.
| Вариант | Описание | Поддерживается в |
|---|---|---|
|
Выравнивает значение поля по левому краю. |
Aura, Lumo |
|
Выравнивает значение поля по центру. |
Aura, Lumo |
|
Выравнивает значение поля по правому краю. |
Aura, Lumo |
|
Выравнивает значение поля по начальной стороне с учетом текущего направления текста. |
Aura |
|
Выравнивает значение поля по конечной стороне с учетом текущего направления текста. |
Aura |
|
Размещает вспомогательный текст над полем, под меткой. |
Aura, Lumo |
|
Уменьшает размер компонента. |
Aura, Lumo |
Атрибуты
textField имеет следующие уникальные атрибуты:
| Имя | Описание | По умолчанию |
|---|---|---|
Установите значение |
— |
|
Определяет, отображается ли в поле кнопка очистки. |
|
|
Если |
— |
|
Задаёт значение компонента. |
— |
textField имеет следующие общие атрибуты:
id - alignSelf - allowedCharPattern - ariaLabel - ariaLabelledBy - autocapitalize - autocomplete - autocorrect - autofocus - classNames - colspan - css - dataContainer - datatype - enabled - errorMessage - focusShortcut - height - helperText - label - maxHeight - maxLength - maxWidth - minHeight - minLength - minWidth - pattern - placeholder - property - readOnly - required - requiredMessage - themeNames - title - valueChangeMode - valueChangeTimeout - visible - width
Обработчики
textField имеет следующие уникальные обработчики:
| Имя | Описание |
|---|---|
Проверяет значение компонента. |
textField имеет следующие общие обработчики: