Thymeleafでチェックボックス(checkbox)の処理を実装
Thymeleafでチェックボックスの処理を実装する方法について、以下のコードを参考にしてください。
フォームのクラス、Thymeleafテンプレート、コントローラの処理を含めています。
フォームのクラス
// CheckboxForm.java package com.example.demo.form; public class CheckboxForm { private boolean agreeTerms; // Getter and Setter public boolean isAgreeTerms() { return agreeTerms; } public void setAgreeTerms(boolean agreeTerms) { this.agreeTerms = agreeTerms; } }
Thymeleafテンプレート
<!-- checkboxForm.html --> <!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <title>チェックボックスフォーム</title> </head> <body> <form th:action="@{/submitCheckboxForm}" th:object="${checkboxForm}" method="post"> <div> <label> <input type="checkbox" th:field="*{agreeTerms}"/> 利用規約に同意する </label> </div> <div> <button type="submit">送信</button> </div> </form> </body> </html>
コントローラの処理
// CheckboxController.java package com.example.demo.controller; import com.example.demo.form.CheckboxForm; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @Controller public class CheckboxController { @GetMapping("/checkboxForm") public String showForm(Model model) { model.addAttribute("checkboxForm", new CheckboxForm()); return "checkboxForm"; } @PostMapping("/submitCheckboxForm") public String submitForm(CheckboxForm form, Model model) { model.addAttribute("message", form.isAgreeTerms() ? "同意しました。" : "同意しませんでした。"); return "checkboxResult"; } }
結果表示用のThymeleafテンプレート
<!-- checkboxResult.html --> <!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <title>結果</title> </head> <body> <p th:text="${message}"></p> <a href="/checkboxForm">戻る</a> </body> </html>
これで、チェックボックスの状態をフォームで送信し、結果を表示する一連の処理が完成します。
チェックボックスが複数ある場合
チェックボックスが複数ある場合の実装方法について、以下のコードを参考にしてください。
複数のチェックボックスを扱うために、フォームクラスを拡張し、Thymeleafテンプレートを更新し、コントローラの処理を調整します。
フォームのクラス
// MultiCheckboxForm.java package com.example.demo.form; import java.util.List; public class MultiCheckboxForm { private List<String> selectedOptions; // Getter and Setter public List<String> getSelectedOptions() { return selectedOptions; } public void setSelectedOptions(List<String> selectedOptions) { this.selectedOptions = selectedOptions; } }
Thymeleafテンプレート
<!-- multiCheckboxForm.html --> <!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <title>チェックボックスフォーム</title> </head> <body> <form th:action="@{/submitMultiCheckboxForm}" th:object="${multiCheckboxForm}" method="post"> <div> <label> <input type="checkbox" th:field="*{selectedOptions}" value="Option1"/> オプション1 </label> </div> <div> <label> <input type="checkbox" th:field="*{selectedOptions}" value="Option2"/> オプション2 </label> </div> <div> <label> <input type="checkbox" th:field="*{selectedOptions}" value="Option3"/> オプション3 </label> </div> <div> <button type="submit">送信</button> </div> </form> </body> </html>
コントローラの処理
// MultiCheckboxController.java package com.example.demo.controller; import com.example.demo.form.MultiCheckboxForm; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @Controller public class MultiCheckboxController { @GetMapping("/multiCheckboxForm") public String showForm(Model model) { model.addAttribute("multiCheckboxForm", new MultiCheckboxForm()); return "multiCheckboxForm"; } @PostMapping("/submitMultiCheckboxForm") public String submitForm(MultiCheckboxForm form, Model model) { model.addAttribute("selectedOptions", form.getSelectedOptions()); return "multiCheckboxResult"; } }
結果表示用のThymeleafテンプレート
<!-- multiCheckboxResult.html --> <!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <title>結果</title> </head> <body> <p>選択したオプション:</p> <ul> <li th:each="option : ${selectedOptions}" th:text="${option}"></li> </ul> <a href="/multiCheckboxForm">戻る</a> </body> </html>
これで、複数のチェックボックスの状態をフォームで送信し、結果を表示する一連の処理が完成します。