Валидация Integer поля

Добрый день!

     <textField required="true" id="numberOrderProcedureSsField" property="numberOrderProcedureSs">
                    <validators>
                        <positiveOrZero message="msg://com.irao.seb.screen.ui.validate.MsgDigest/positive"></positiveOrZero>
                        <digits fraction="0" integer="9" message="msg://com.irao.seb.screen.ui.validate.MsgInteger/format"></digits>
                    </validators>
                </textField>

numberOrderProcedureSsField - integer тип поля.

если я введу число с плавающей точкой к примеру 6,44 он не выполняет digits валидацию
а выполняет databinding.conversion.error.int и дальше ничего не делает.

как сделать мне проверку на то что это целое число а не вещественное. и соответственно вывести мне нужное сообщение:

Значение ${value} выходит за допустимые пределы (9 цифр ожидается в целой части и 0 после запятой)

У textField есть conversionErrorMessage Я так понимаю его вам и нужно заменить.
Думаю там можно поставить стандартное сообщение validation.constraints.digits - числовое значение вне границ (<{integer} digits>.<{fraction} digits>)

1 симпатия

чуть позже гляну!!! спасибо :hugs:

как я понимаю в таком случае надо писать обработчик который будет проверять поле… и если там есть число с плавающей точкой записывать ошибку в conversionErrorMessage?

а так из коробки получается просто использовав digits валидацию на итегр поле…не получится использовать?
Да и вообще по логике вещей почему если diget валидация поддерживает тип Integer так почему же тогда он не кидает ошибку когда у меня 9 цифр ожидается в целой части и 0 после запятой?

Зачем обработчик? Просто в дескрипторе напишите у textField conversionErrorMessage="..." Или вы хотите чтобы при наведении на поле там выводилось “Должно быть Integer”, а при попытке сохранить чтоб падало “9 цифр ожидается…” Тогда переопредлите в экране validateScreen там ловите нужный вам ValidationError и меняйте у него description

Если у вас поле Integer, a вы прописываете Double то логично что сначала падает ConversionException.

digitValidator должен сработать когда вы попытаетесь ввести Integer значение длинной более 9 символов.

ПС. Как я вижу у Item ValidationErrors description final. Так что вам нужно будет убирать данный item и добавлять свой с нужным description

1 симпатия

Так… если вам нужно прям такое сообщение. То я легкого решения не вижу в особенности если так должно работать в одном экране…

Если вы хотите чтоб так работало во всем приложении. То скорее всего нужно будет переопределить TextFieldImpl#getConversionErrorMessageInternal Там проверять есть ли у поля digitValidator и менять сообщение на то что вам нужно.

хорошо…спасибо Вам. разберемся