在我的HTML中,我遍历了一个玩家列表(spieler
)。
<th:block th:each="spieler : ${runde.spieler}" >
每个玩家应该在同一组中拥有一个未经检查的单选按钮。当选中一个单选按钮时,我想将值绑定到特定播放器的属性。该属性是一个布尔字段(zerrissen)
。
<input type="radio" th:value="${spieler.zerrissen}" th:field="*{runden[__${rundeStat.index}__].spieler[__${spielerStat.index}__].zerrissen}" />
对于复选框,绑定工作正常。但是使用单选按钮无法正常工作。
<input type="checkbox" th:field="*{runden[__${rundeStat.index}__].spieler[__${spielerStat.index}__].gegangen}"/>
如何在循环中将单选按钮绑定到模型的布尔属性?
编辑:
简单来说,我有三个spieler
。每个spieler
都有一个布尔属性:spieler.zerrissen
。并且每个spieler
在视图上都有一个单选按钮。如果我点击spieler 1
的单选按钮并提交表单,则#{1}} - @ModelAttribute spieler
的spieler 1`应为true。我怎样才能做到这一点?
绑定到我的模型是有效的,因为我使用spieler.zerrissen
属性。但是使用th:field
也意味着每个单选按钮的生成名称不同,因此我可以检查每个单选按钮而不仅仅是一个。
答案 0 :(得分:2)
单选按钮不适合在百里香中使用。一组单选按钮应该都具有相同的th:字段(并选择单选按钮将该字段设置为所选值)。您不能拥有一组映射到不同字段的单选按钮。
我认为你有两种选择:
使用映射到th:对象上的新字段的单选按钮。您将添加一个getter和setter,其中getter将遍历spieler并返回第一个spieler的索引,其中zerrissen == true,setter将获取spieler的索引并在该对象上设置zerrissen = true(和false)在所有其他)。单选按钮的值将是每个spieler的索引。
某种javascript解决方案(使用复选框和javascript /服务器端验证,以确保他们只选择一个)。
答案 1 :(得分:0)
这是因为您同时使用th:value
和th:field
标记。
根据文件
<input th:field="${someThing}" />
将生成
<input id="someThing" name="someThing" />
但是对于所有的无线电按钮你需要相同的name
,这就是它无法工作的原因。
所以,试试这个:
UPD尝试将值设置为0或1而不是true或false:
<th:block th:each="spieler, iterStat : ${runde.spieler}" >
<input type="radio" th:id="'spieler'+${iterStat.count}"
th:value="${spieler.zerrissen ? '1' : '0'}" name="spieler.zerrissen" th:checked=${spieler.zerissen} />
答案 2 :(得分:0)
我刚刚完成了一个有效的解决方案。这对初学者来说有点棘手。
@Controller
@GetMapping("/radio")
public String radioButton(@ModelAttribute("foo") Foo foo, ModelMap model) {
model.addAttribute("cts", contMet());
return "radio";
}
帮助方法contMet()对我来说是一个解决方案:
public List<String> contMet() {
List <String>cm = new ArrayList<>();
Iterator <Foo> iter = cTR.findAll().iterator(); //cTR is a repository for the Foo class.
while(iter.hasNext()) {
cm.add(iter.next().getType());
}
return cm;
}
模板:
<div th:each="mo: ${cts}" th:object="${foo}">
<input type="radio" th:field="*{type}" th:value="${mo}" th:text="${mo}" />
</div>
Foo对象:
Public class Foo{
@Id
private String conId = UUID.randomUUID().toString();
private String type;
---etc
--getters and setters