Откуда целевой объект назначен в BindingResult? - PullRequest
0 голосов
/ 04 мая 2018

Я использую SpringFramework не так давно. Поясните мне, пожалуйста, откуда из целевой объект "Драйвер" назначен BindingResult в контроллере. Я выделил это красным квадратом на снимке экрана. Мне нужно связать другой объект, чтобы проверить его поля.

снимок экрана

На лицевой стороне я использую шаблон тимелист

        <form id="statusSheduleForm" class="form-horizontal" th:action="@{/driver/saveStatusSchedule}"
              th:method="POST"
              th:object="${driverHistory}">
            <div class="form-group col-md-7">
                <div class="input-group date">
                    <label class="validation-message" for="statusdatetimepicker1"
                           th:if="${#fields.hasErrors('startStatusDate')}"
                           th:errors="*{startStatusDate}"></label>
                    <input type="text" placeholder="Время начала" th:field="*{startStatusDate}"
                           id="statusdatetimepicker1"/>
                    <input type="text" placeholder="Время окончания" th:field="*{endStatusDate}"
                           id="statusdatetimepicker2"/>
                    <select id="status-select" required="required" th:field="*{driverStatus}">
                        <option th:each="item:${statuses}"
                                th:value="${item.id}"
                                th:text="${item.name}"></option>
                    </select>
                </div>
            </div>

            <div class="form-group">
                <button type="submit" class="btn btn-primary">Сохранить</button>
                <a th:href="@{/driver/index}" class="btn btn-default">Закрыть</a>
            </div>

        </form>

1 Ответ

0 голосов
/ 04 мая 2018

Я нашел ответ на свой вопрос и решил проблему. Я хочу поделиться этим здесь.

Плохо, что я не знал, что порядок параметров имеет важное значение, особенно когда мы используем параметр BaindingResult в контроллере. Объект BindingResult - получение ранее объявленного объекта в списке параметров. Другими словами. Как видно из скриншота вопроса, изображение. Метод saveStatusSchedule() имеет порядок параметров: DriverHistory driverHistory, Driver driver, BindingResult bindingResult

@RequestMapping(value = "/saveStatusSchedule", method = RequestMethod.POST)
public ModelAndView saveStatusSchedule(DriverHistory driverHistory,
                                       Driver driver,
                                       BindingResult bindingResult)

В этом случае BindingResult получает Driver в качестве целевого объекта для последующей проверки его полей. Если мне нужно проверить поля объекта DriverHistory, мне нужно переместить параметр BindingResult bindingResult после DriverHistory driverHistory, например:

@RequestMapping(value = "/saveStatusSchedule", method = RequestMethod.POST)
public ModelAndView saveStatusSchedule(DriverHistory driverHistory,
                                       BindingResult bindingResult,
                                       Driver driver)

Итак, если вы используете более одного объекта в качестве параметров в методе Contoller и используете BindingResult для проверки этих объектов, позаботьтесь о порядке параметров

Извините за многие слова , Решение пришло в голову из подсказки, которую я посмотрел в "ru" версии stackoverflow https://ru.stackoverflow.com/questions/475310/%d0%9f%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d1%8b-%d1%81-%d0%b2%d0%b0%d0%bb%d0%b8%d0%b4%d0%b0%d1%86%d0%b8%d0%b5%d0%b9-%d0%bd%d0%b0-spring-boot-oval/475365#475365
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...