Платформа Cuba. Посібник із розробки додатків4.5.2.1. Компоненти

4.5.2.1.27. TextField

Поле для редагування тексту. Може використовуватися як для роботи з атрибутами сутностей, так і для введення та відображення довільної текстової інформації.

XML-ім'я компонента: textField

платформа

Компонент текстового поля реалізований для блоків Web Client та Desktop Client.

Приклад текстового поля із заголовком, взятим із пакета локалізованих повідомлень:

На малюнку нижче показано вигляд простого текстового поля.

Для створення текстового поля, пов'язаного з даними, необхідно використовувати атрибути datasource та property.

Якщо поле не пов'язане з атрибутом сутності (тобто не вказано джерело даних та назва атрибута), можна вказати тип даних за допомогою атрибута datatype . Тип даних використовується для форматування поля. Як значення атрибуту може бути вказано будь-яке ім'я типу даних, зареєстрованого в метаданих додатках - див. Розділ 4.2.2.3, Datatype. Як правило, у TextField використовуються такі типи даних:

Як приклад розглянемо текстове поле з типом даних Integer.

Якщо в такому полі ввести значення, яке неможливо інтерпретувати як ціле число, при втраті фокусу полем буде виведено повідомлення про помилку і значення поля повернеться на попереднє:

додатків4

Текстовому полю може бути призначений валідатор – клас, що реалізує інтерфейс Field.Validator. Валідатор дозволяє додатково до datatype обмежити інформацію, що вводиться користувачем. Наприклад, для створення поля введення позитивних цілих чисел потрібно створити клас валідатора:

і встановити його для текстового поля з типом даних int в елементі validator:

На відміну від перевірки рядка, що вводиться на відповідність типу даних, валідація спрацьовує не відразу при втратіполем фокуса, а лише при виклику у поля методу validate(). Це означає, що поле (і пов'язаний з ним атрибут сутності) може деякий час містити значення, що не відповідає умовам валідації (у наведеному прикладі непозитивне число). Це не є проблемою, оскільки зазвичай поля редагування з валідацією розташовуються на екрані редагування, а він автоматично викликає валідацію всіх своїх полів перед комітом. Якщо ж поле знаходиться не в екрані редагування, необхідно викликати метод validate() поля в контролері явно.

Якщо текстове поле пов'язане з атрибутом сутності (через datasource і property ), і якщо для атрибуту сутності в JPA-анотації @Column зазначено параметр length , TextField буде обмежувати максимальну довжину введеного тексту.

Якщо текстове поле не пов'язане з атрибутом, або для нього не визначено значення length або це значення потрібно перевизначити, то для обмеження максимальної довжини тексту, що вводиться, можна використовувати атрибут maxLength . Значення "-1" означає відсутність обмеження. Наприклад:

За промовчанням текстове поле відсікає пробіли на початку та наприкінці введеного рядка. Тобто якщо користувач ввів рядок "aaa bbb" то значення поля, що повертається методом getValue() і зберігається у зв'язаний атрибут сутності, буде рядок "aaa bbb". Щоб вимкнути відсікання пробілів, використовуйте атрибут trim зі значенням false .

Слід мати на увазі, що відсікання пробілів працює тільки при введенні нового значення. Якщо в значенні пов'язаного атрибута вже є пробіли, вони відображатимуться доти, доки користувач не змінить значення поля.

Текстове поле завжди замість введеного порожнього рядка повертає null. Відповідно, при включеному атрибуті trim рядок,що складається з одних прогалин також перетвориться на null.

Атрибут inputPrompt задає рядок, що відображається в полі, якщо його значення дорівнює null. Реалізовано лише для web клієнта.

Метод setCursorPosition() використовується для встановлення позиції курсору у вказаний індекс (починається з 0). Після дзвінка методу поле приймає фокус введення.