Thymeleafでnameを配列で保持した実装
Thymeleafでnameを配列で保持するための実装例を以下に示します。
ここでは、フォームでnameフィールドを配列として扱い、サーバーサイドでリストとして受け取る方法を説明します。
1. フォームクラスの作成
まず、NameFormというフォームクラスを作成します。
このクラスには、namesというリストを持たせます。
import java.util.List; public class NameForm { private List<String> names; // ゲッターとセッター public List<String> getNames() { return names; } public void setNames(List<String> names) { this.names = names; } }
2. コントローラの変更
NameFormクラスを使用してデータを受け取るようにします。
import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; @Controller @RequestMapping("/example") public class ExampleController { @PostMapping("/submit") public ModelAndView submitForm(@ModelAttribute NameForm nameForm) { // NameFormから名前リストを取得 List<String> names = nameForm.getNames(); for (String name : names) { System.out.println(name); } // ビューの名前を返す(適宜変更) return new ModelAndView("result").addObject("names", names); } }
3. HTMLテンプレートの更新
th:object属性を使用して、NameFormクラスのプロパティにバインドします。
<form action="/example/submit" method="post" th:object="${nameForm}"> <div> <label for="name1">名前 1:</label> <input type="text" id="name1" name="names[0]" /> </div> <div> <label for="name2">名前 2:</label> <input type="text" id="name2" name="names[1]" /> </div> <div> <label for="name3">名前 3:</label> <input type="text" id="name3" name="names[2]" /> </div> <button type="submit">送信</button> </form>
4. ビュー(result.html)
result.htmlでは、コントローラから渡されたデータを表示します。
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <title>結果</title> </head> <body> <h1>送信された名前</h1> <ul> <li th:each="name : ${names}" th:text="${name}"></li> </ul> </body> </html>
この方法で、NameFormクラスを使ってフォームのデータを受け取ることができ、データをサーバーサイドで処理する際に便利です。
フォームの各フィールドにはnames[]という形式で名前を付け、リストとして送信されるようにします。