Spring MVC: BindingResult, созданный в контроллере, отключает все форматирование в форме - PullRequest
0 голосов
/ 27 мая 2019

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

В моем duplicateController я просто загружаю форму и проверяю ее. Чтобы отобразить проблему ниже каждого ошибочного поля, я пытаюсь создать BindingResult непосредственно в контроллере.

    ContractForm contractForm = new ContractForm();
    BindingResult bindingResult = (new DataBinder(contractForm )).getBindingResult();
    model.addAttribute(BindingResult.MODEL_KEY_PREFIX + "contractForm", bindingResult);
    contractService.getContractForCopy(contractForm, contractId, bindingResult);

Затем, когда я показываю свои ошибки в тимелист, все выглядит нормально.

<label class="error" th:if="${#fields.hasErrors('invoiceEndDate')}" th:errors="*{invoiceEndDate}"></label>

Моя проблема в том, что если я посмотрю на отображаемые данные, все аннотации форматирования будут пропущены, поэтому мои даты / числа будут ko.

Когда я отлаживаю в коде Spring, я вижу, что в обычном случае (когда пользователь отправляет форму или когда я загружаю форму без переопределения BindingResult), у меня есть много Formatter в "ConversionService" в объекте BeanPropertyBindingResult , Но когда я дублирую свою форму, «ConversionService» будет пустым. Так что все мои поля отображаются неправильно.

Итак, мои вопросы:

1) Это хороший способ сделать это? Я имею в виду, как загрузить форму и добавить некоторые дополнительные FieldErrors, чтобы пользователь знал, что форма не в порядке

2) Если нет, я все еще могу добавить дополнительные ошибки в модель, но я не хочу добавлять этот вид кода под каждым полем:

<label class="error" th:if="${#fields.hasErrors('invoiceEndDate')}" th:errors="*{invoiceEndDate}"></label>

и этот для ошибки, управляемой вручную

<label class="error" th:if="${#mySpecificErrorForThisField!=null}" th:errors="*{mySpecificErrorForThisField}"></label>

3) Нужно ли в этом случае вручную регистрировать весь форматтер?

Спасибо.

...