Thymeleafでth:fieldを使用した実装

Thymeleafでth:fieldを使用した実装

th:field は、Thymeleaf でフォームの入力フィールドを自動的にバインドするために使用します。
これにより、フォームフィールドの名前、ID、値が自動的に設定されます。
以下は、th:field を使用した実装例です。

1. フォームのクラス

まず、フォームデータを保持するためのクラスを作成します。

// FormData.java
public class FormData {
  private String name;
  private int age;
  
  // ゲッターとセッター
  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public int getAge() {
    return age;
  }

  public void setAge(int age) {
    this.age = age;
  }
}

2. コントローラの処理

次に、コントローラを作成してフォームデータを処理します。

// FormController.java
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ModelAttribute;

@Controller
public class FormController {

  @GetMapping("/form")
  public String showForm(Model model) {
    model.addAttribute("formData", new FormData());
    return "form";
  }

  @PostMapping("/submitForm")
  public String submitForm(@ModelAttribute FormData formData, Model model) {
    // フォームデータを処理するロジック
    model.addAttribute("formData", formData);
    return "result";
  }
}

3. Thymeleaf テンプレート

フォームを作成し、th:field を使ってフォームの入力フィールドをバインドします。

<!-- form.html -->
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
  <title>フォーム</title>
</head>
<body>
  <form th:action="@{/submitForm}" th:object="${formData}" method="post">
    <label for="name">名前:</label>
    <input type="text" id="name" th:field="*{name}" />
    
    <label for="age">年齢:</label>
    <input type="number" id="age" th:field="*{age}" />
    
    <button type="submit">送信</button>
  </form>
</body>
</html>

4. 結果表示テンプレート

送信後に結果を表示するためのテンプレートです。

<!-- result.html -->
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
  <title>結果</title>
</head>
<body>
  <h1>送信されたデータ</h1>
  <p>名前: <span th:text="${formData.name}"></span></p>
  <p>年齢: <span th:text="${formData.age}"></span></p>
</body>
</html>

この構成により、フォームで入力したデータが自動的にバインドされ、th:field 属性によって適切な値が送信されます。