Thymeleaf表单使用th:field时如何为checkbox设置选中状态?
问题核心原因
使用th:field绑定表单字段时,Thymeleaf会自动覆盖你手动设置的checked/th:checked属性,完全根据绑定字段的取值、以及当前复选框的th:value值是否匹配来判断是否勾选,不需要手动控制checked属性。
你代码里没生效的核心问题是th:value的取值写错了:
你代码中th:value="*{property.id}"用了表单对象选择器*,但property是th:each遍历出来的上下文变量(来自${tabs}),不属于表单绑定对象的字段,所以取值错误,导致th:field无法匹配到shop.listOfProperty里的对应值,自然不会自动勾选。
解决方法
步骤1:修正th:value写法
去掉手动写的checked属性,把th:value改成从遍历变量property里取值,用$选择器即可:
<ul name="property" id="property" class="form-control mt-3"> <li th:each="property, el : ${tabs}"> <input type="checkbox" th:id="${el.count}" th:value="${property.id}" th:field="*{shop.listOfProperty}" /> <label th:text="${property.name}">Heating</label> </li> </ul>
步骤2:保证后台数据类型匹配
确保*{shop.listOfProperty}中存储的元素类型,和${property.id}的类型完全一致:
- 比如
property.id是Integer类型,那listOfProperty就要是List<Integer>,不能是List<Long>或者List<String>,类型不匹配的话Thymeleaf判定为不相等,也不会勾选。
只要以上两点配置正确,Thymeleaf会自动把listOfProperty中存在的ID对应的复选框设为选中状态,无需额外手动设置checked属性。
内容的提问来源于stack exchange,提问作者Serg
相关产品推荐
相关产品推荐

