Подтвердить что ты не робот

Spring "typemismatch" и обязательные поля

В контексте Spring Webflow 2.0.x......

Я обрабатываю привязку формы "typemismatches", т.е. в результате попытки сопоставить строку String в поле Integer, используя следующее в моем messages.properties

typeMismatch={0} contains invalid data.

Это отлично работает.

Проблема в том, что если поле, в котором произошла ошибка typeMismatch, было "обязательным", тогда я также получаю сообщение об ошибке для отсутствующего требуемого поля, что логично, я думаю, потому что значение, которое было отправлено, никогда не связывалось. ( "Обязательный" определяется в XML файле проверки целостности Commons)

Итак, я не хочу видеть сообщение об ошибке "XXX обязательное поле", когда поле отсутствует только из-за типаMismatch. Как это разрешить? Я думал об переопределении initBinder() на FormAction, но быстро не получил никуда.....

4b9b3361

Ответ 1

Как упоминал Ив, среди трех подходов я использовал собственный метод валидатора и его очень легко. Вы можете использовать специальный валидатор, который проверяет, имеет ли поле формы обязательное сообщение об ошибке xml. Если в поле нет ошибки, вы можете проверить правильность своей строки. Таким образом, он отображает только один.

Другим способом, который вы можете использовать, является попытка проверки нескольких xml, одна из которых требуется, а другая - маска, которая проверяет определенное регулярное выражение. В вашем случае, если ваше поле является целым полем, вы можете пойти и выполнить маску с регулярным выражением, проверяющим только числа. Порядок маски, требуемый или требуемый, маскирует в xml, решает, какое сообщение получает более высокое предпочтение.

Например:

<field property="somefield" depends="required,mask" page="2">
<arg key="somelabel"/>
<var>
    <var-name>mask</var-name>
    <var-value>${somepattern}</var-value>
</var>
</field>

Ответ 2

У вас есть много вариантов, в порядке предпочтения:

  • Установите выборочно сообщение typeMismatch.target. yourFieldName или typeMismatch.int в файлах ресурсов

  • Внесите свой собственный валидатор, чтобы вы могли отправить выделенное сообщение, когда синтаксический анализ Integer завершится до этапа привязки

  • Создайте BindingErrorProcessor для обработки различных типов синтаксического анализа