Spring "typemismatch" и обязательные поля - PullRequest
11 голосов
/ 02 сентября 2010

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

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

typeMismatch={0} contains invalid data.

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

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

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

Ответы [ 2 ]

2 голосов
/ 10 апреля 2012

Как упоминал Ив, среди трех подходов я использовал собственный метод валидатора, и он очень прост. Вы можете использовать пользовательский валидатор, который проверяет, есть ли в поле формы сообщение об ошибке 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>
1 голос
/ 13 марта 2012

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

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

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

  • Создать BindingErrorProcessorобрабатывать различные виды разборов

...