来自Thymeleaf的null复选框选项

时间:2016-08-18 15:49:42

标签: java html checkbox spring-boot thymeleaf

我的HTML表单中有一个人员列表,用复选框表示。当用户选择其中一些人并提交表单时,我的控制器会收到这些选择的null值列表,而不是HTML表单中的ID值。我认为我的绑定结果在某种程度上是错误配置的。

demo

我的HTML:

<fieldset id="covered_deps">
 <legend>Covered Dependents</legend>
  <label class="col-xs-4"></label>
  <ul class="col-xs-8" th:classappend="${#fields.hasErrors('oa.dependents')} ? has-error">

    <li class="col-xs-8 checkbox" th:each="dep, stat : ${session.submission.uso.peopleNotOrgs()}"><input type="checkbox"
        th:checked="*{oa.containsCoveredDependent('__${dep.id}__')}" th:name="oa.dependents" th:value="${dep.id}" /> <label
        th:text="${dep.getSimpleDisplayName()}">Jr</label></li>
  </ul>
<span class="help-block" th:errors="*{oa.dependents}">[error]</span></fieldset>

我的控制器:

@RequestMapping(value = "/obli", method = RequestMethod.PUT)
public String updateObli(@Valid @ModelAttribute("obli") Obligation obli, BindingResult br, Model model, HttpSession session) { ...

我控制器中的另一种方法。

@InitBinder
public void initBinder(WebDataBinder binder, HttpSession session) {

    // obligation recipient [obligee]
    binder.registerCustomEditor(PersonOrOrg.class, new PersonOrOrgPropertyEditor(session));

    binder.registerCustomEditor(Payee.class, new PayeePropertyEditor(session));

    // covered dependents & obligor
    binder.registerCustomEditor(Person.class, new PersonPropertyEditor(session));
}

奇怪的是:我在表格的正上方有另一个用复选框表示的人物集合。更高的字段集正在完美运行。它使用相同的控制器方法,因为它采用相同的HTML格式。当我比较这两个字段集的渲染HTML源时,它们几乎相同。

My Spring Boot父版本是&#34; 1.3.7.RELEASE&#34;,它使用Thymeleaf&#34; 2.1.5.RELEASE&#34;。

当无法绑定嵌套表单对象的属性/属性时,是否可以强制Thymeleaf或SpringMVC向日志文件写入警告?

我的整个HTML可以在这里看到:

editObli.html

我还应该提一下对象图。表格以&#34;义务&#34;宾语。 Obligation类有两个重要的成员字段,SupportPayee和ObligationAugmentation。 SupportPayee有一个收款人对象列表。 ObligationAugmentation有一个Person对象列表来表示覆盖的依赖项。 Payee类具有String id成员字段。 Person类还有一个String id成员字段,但是从它扩展的抽象超类继承它。我怀疑SpringMVC无法绑定到抽象超类中的id,但我不知道如何测试这种怀疑。 SupportPayee的代码工作得很好,而ObligationAugmentation的代码却没有。

以下是Chrome开发人员工具中的“网络”标签的屏幕截图。突出显示的值是我的选择。

enter image description here

0 个答案:

没有答案