我的HTML表单中有一个人员列表,用复选框表示。当用户选择其中一些人并提交表单时,我的控制器会收到这些选择的null
值列表,而不是HTML表单中的ID值。我认为我的绑定结果在某种程度上是错误配置的。
我的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可以在这里看到:
我还应该提一下对象图。表格以&#34;义务&#34;宾语。 Obligation类有两个重要的成员字段,SupportPayee和ObligationAugmentation。 SupportPayee有一个收款人对象列表。 ObligationAugmentation有一个Person对象列表来表示覆盖的依赖项。 Payee类具有String id成员字段。 Person类还有一个String id成员字段,但是从它扩展的抽象超类继承它。我怀疑SpringMVC无法绑定到抽象超类中的id,但我不知道如何测试这种怀疑。 SupportPayee的代码工作得很好,而ObligationAugmentation的代码却没有。
以下是Chrome开发人员工具中的“网络”标签的屏幕截图。突出显示的值是我的选择。