【问题标题】:Where from target object is assigned in BindingResult?在 BindingResult 中从哪里分配目标对象?
【发布时间】:2018-10-14 11:18:44
【问题描述】:

我使用 SpringFramework 的时间不长。请澄清我从 目标对象 “驱动程序” 分配给控制器中的 BindingResult 的位置。我在屏幕截图中用红色方块突出显示它。我需要绑定其他对象来验证它的字段。

screenshot image

在前面我使用百里香模板

        <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>

【问题讨论】:

    标签: java spring-mvc spring-boot thymeleaf


    【解决方案1】:

    我找到了问题的答案并解决了问题。我想在这里分享。

    我不好的是我不知道参数顺序有重要意义,特别是当我们在控制器中使用BaindingResult参数时。 BindingResult 对象是获取参数列表中先前声明的对象。换一种说法。正如我们从问题的屏幕截图中看到的那样。方法saveStatusSchedule()有参数顺序:DriverHistory driverHistory, Driver driver, BindingResult bindingResult

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

    在这种情况下,Driver 由 BindingResult 作为目标对象获得,以随后对其字段进行验证。如果我需要验证DriverHistory 对象的字段,我需要在DriverHistory driverHistory 之后移动BindingResult bindingResult 参数,例如:

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

    所以,如果你在 Contoller 的一个方法中使用多个对象作为参数并使用 BindingResult 来验证这些对象,请注意参数顺序

    很抱歉说了很多话。 从我在 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 的“ru”版本中查看的提示中想到了解决方案

    【讨论】:

      猜你喜欢
      • 2021-11-28
      • 1970-01-01
      • 1970-01-01
      • 2014-08-17
      • 2013-09-06
      • 2011-09-19
      • 2020-06-18
      • 1970-01-01
      • 2017-02-15
      相关资源
      最近更新 更多