2016-05-30 93 views
0

在我的HTML中,我迭代了一個玩家列表(spieler)。如何將th:字段綁定到循環中單選按鈕的值

<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的單選按鈕並提交表格,則spieler 1`的@ModelAttribute spieler-spieler.zerrissen應該是true。我怎樣才能做到這一點?

綁定到我的模型正在工作,因爲我使用th:field屬性。但使用th:field也意味着每個單選按鈕的生成名稱是不同的,所以我可以檢查每個單選按鈕,而不僅僅是一個。

回答

2

單選按鈕沒有被設計成使用這種方式thymeleaf 。一組單選按鈕應該都有相同的th:字段(並且選擇一個單選按鈕將該字段設置爲所選值)。您不能有一組單選按鈕映射到不同的字段。

我想你這裏有兩種選擇:映射到一個新的領域你的日

  1. 使用單選按鈕:對象。你可以添加一個getter和setter,getter將循環遍歷spielers,並返回第一個spieler的索引,其中zerrissen == true,setter將獲取spieler的索引並在該對象上設置zerrissen = true(並且false在所有其他)。單選按鈕的值將是每個spieler的索引。

  2. 某種JavaScript解決方案(使用複選框和JavaScript /服務器端驗證,以確保他們只選擇一個)。

0

發生這種情況是因爲您同時使用了th:valueth:field標籤。 根據文檔 <input th:field="${someThing}" />會產生
<input id="someThing" name="someThing" />

,但你需要對所有的單選按鈕的同name,這就是爲什麼它不工作。

所以,試試這個:

UPD嘗試設置值爲0或1不爲真或假:

<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} /> 
+0

謝謝您的回答。但綁定到模型不起作用。任何解決方案? – Patrick

+0

我已更新答案。嘗試一下! – sanluck

+0

對不起,似乎綁定不起作用。我需要將這個字段放入:'* {runden [__ $ {rundeStat.index} __]。spieler [__ $ {spielerStat.index} __]。zerrissen'我應該在輸入中設置它?對於複選框這可以工作。 (更新的問題) – Patrick

0

我剛剛找到一個工作解決方案。初學者有點棘手。

@Controller 
@GetMapping("/radio") 
public String radioButton(@ModelAttribute("foo") Foo foo, ModelMap model) { 
    model.addAttribute("cts", contMet());     
    return "radio"; 
} 

helper方法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 
相關問題