2017-09-16 172 views
2

我有這顯示在UI有一個複選框上GET請求記錄列表綁定在POST對象列表。 春天開機:如何thymleaf

@GetMapping("/list") 
    public String list(Model model) { 
     model.addAttribute("records", createRecords()); 
     return "list"; 
    } 

這是我RecordPOJO

class Record{ 
    private boolean selected; 
    private Integer id; 
    private String name;  
    private String phone; 
    //.... 

我顯示在用戶界面如下:

<th:block th:each = "record : ${records}"> 
<tr> 
    <td><input type="checkbox" th:field="*{selected}" th:checked="${record.selected}" /></td> 
    <td th:field="*{id}" th:text="${record.id}" /> 
    <td th:field="${name}" th:text="${record.name}" /> 
    <td th:field="${phone}" th:text="${record.phone}" /> 
</tr> 
</th:block> 

我有很難得到日對POSTUI選定的記錄êList。我只從POST得到一個對象。

我想在POST映射是這樣的:

@PostMapping("/list") 
    public String select(@ModelAttribute ArrayList<Record> records) { 
     //... at least ids of selected records 
    //... or all the records back with selected 

請幫助。

+0

這可能是https://stackoverflow.com/questions/36500731/how-to-bind-an-object-list-with-thymeleaf的副本。 – ben3000

+0

@ ben3000我有使用相同的對象,而不是使用具有主要對象列表包裝對象的限制。 –

回答

1

有一些你的問題的潛在原因。下面列出的三個項目應該可以幫助您的形式正確映射:

  1. 你應該建立正確的形式,包括使用*符號,以減少重複,例如:

    <th:block th:each = "record : ${records}"> 
        <tr> 
        <td><input type="checkbox" th:field="*{selected}"/></td> 
        <td><input type="text" th:field="*{id}"/></td> 
        <td><input type="text" th:field="*{name}"/></td> 
        <td><input type="text" th:field="*{phone}"/></td> 
        </tr> 
    </th:block> 
    

    如圖在Spring + Thymeleaf tutorial

  2. 您可能需要遍歷${records}時候能得到各Record在表單填寫正確使用雙下劃線符號。按照the Thymeleaf + Spring tutorial

    .. __${...}__語法是一種預處理表達,這是實際評估整個表達式之前評估的內表達。

    參見例如this question

  3. 仔細檢查你被接受與@ModelAttribute@RequestParam註釋一List<Record>正確處理在Spring @Controller結果列表。 (看起來你已經這樣做了,

    參見例如this question