我尝试从动态创建的复选框中保存值:
<div>
<ul>
<li th:each="item, stat : *{users}">
<input type="checkbox" th:field="*{users[__${stat.index}__]}" th:value="${item}" />
<label th:text="${item}"></label>
</li>
</ul>
</div>
控制器提供String项目如下:
public List<String> getUsers() {
return users;
}
字符串的设定者是:
public void setUsers(final String[] users) {
for (final String string : users) {
System.out.println(string);
}
}
html页面中显示的值正确无误。但是当我单击“保存”按钮并调用setter时,值为空。我能做什么,问题出在哪里? 任何帮助都会很感激。
答案 0 :(得分:0)
请查看Tutorial: Thymeleaf + Spring中有关handlin多值复选框的部分。
您应该提供一些模型属性(类型为List<String>
),其中包含可供选择的所有用户。我们称之为selectableUsers
。
然后它可以通过以下方式与您的表单支持bean(包含users
的bean)协作:
<div>
<ul>
<li th:each="item : ${selectableUsers}">
<input type="checkbox" th:field="*{users}" th:value="${item}" />
<label th:for="${#ids.prev('users')}" th:text="${item}"></label>
</li>
</ul>
</div>
注意我认为字段的getter和setter应该处理相同的类型,但它们不会(getter返回List<String>
但是setter使用String[]
)
答案 1 :(得分:0)
您尝试做的事情看似合乎逻辑,但它不会那样。
如果你没有得到解决,你可以这样做:
在控制器的相关方法中,您可以为复选框添加标题列表:
List<String> allUsers = Arrays.asList("abc","xyz"); // OR generate list dynamically
model.addAttribute("selectableUsers", allUsers);
如果您正在使用它,请将其添加到ModelAndView。
将您的html更改为@Jakub Ch。
按如下方式更改您的getter和setter方法:
private String users;
...
public String getUsers() {
return this.users;
}
public void setUsers(String users) {
this.users = users;
}
然后&#39;用户&#39;字段将包含逗号分隔的字符串值或其ID号(取决于您如何设置它)指示所选复选框。然后,您可以使用如下代码将String值转换为数组,或者如果存储了id号,则从ArrayList获取String值。
public List<String> getStrings() {
return Arrays.asList(strings.split(","));
}
希望它有所帮助。