Spring "typemismatch" и обязательные поля
В контексте Spring Webflow 2.0.x......
Я обрабатываю привязку формы "typemismatches", т.е. в результате попытки сопоставить строку String в поле Integer, используя следующее в моем messages.properties
typeMismatch={0} contains invalid data.
Это отлично работает.
Проблема в том, что если поле, в котором произошла ошибка typeMismatch
, было "обязательным", тогда я также получаю сообщение об ошибке для отсутствующего требуемого поля, что логично, я думаю, потому что значение, которое было отправлено, никогда не связывалось. ( "Обязательный" определяется в XML файле проверки целостности Commons)
Итак, я не хочу видеть сообщение об ошибке "XXX обязательное поле", когда поле отсутствует только из-за типаMismatch. Как это разрешить? Я думал об переопределении initBinder()
на FormAction, но быстро не получил никуда.....
Ответы
Ответ 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 для обработки различных типов синтаксического анализа