[Java+Spring]ラジオボタン・チェックボックスの受け取り方法

記事内に広告が含まれています。

ラジオボタンやチェックボックスで選択した項目をjavaで受け取る方法についてまとめます.

前提

javaのSpringを前提に作業します.src/ 下のディレクトリ構成は以下の通りです.

src
    ├── main
    │   ├── java
    │   │   └── com
    │   │       └── example
    │   │           └── helloworld
    │   │               ├── FormContents.java
    │   │               ├── HelloController.java
    │   │               └── HelloworldApplication.java
    │   └── resources
    │       └── templates
    │           ├── Form.html

上の3つのファイルを使います.

Springの簡単な環境構築手順については,以下のリンクなどをご参照ください.

ラジオボタンで値を受け取る方法

Content.java

ラジオボタンの項目を受け取るためのクラスを定義します.

package com.example.helloworld;

import lombok.Data;
//getter, setterの記述を省略
@Data 
public class FormContents {
	//フィールドの定義
	private String content;
	//コンストラクタ
	public FormContents() {};
}

FormController.java

package com.example.helloworld;
import java.util.ArrayList;
import java.util.List;
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 HelloController {
    //フォーム画面の表示
    @GetMapping("/form")
    public String displayForm(Model model){
        //選択肢
        List<String> selectList = new ArrayList<>();
		selectList.add("選択肢1");
		selectList.add("選択肢2");
		model.addAttribute("radioItems", selectList);
        model.addAttribute("FormContent", new FormContents());
        return "Form";
    }
    //送信ボタンがクリックされた時,フォームの内容をresult.htmlに渡して
    //画面を表示する
    @PostMapping("/form")
    public String formResult(@ModelAttribute FormContents formContents,Model model){
        System.out.println(formContents.getContent() + "が選択されました");
        return "redirect:/form";
    }

    
}

displayForm メソッドでラジオボタンの選択肢をリストで管理し,html側に渡します.

また,formResult メソッドでは,htmlで選択された項目を受け取ってコンソールに表示しています.

Form.html

<html xmlns:th="https://www.thymeleaf.org">
  <head>
    <meta charset="UTF-8" />
  </head>
  <body>
    <form action="#" th:action="@{/form}" th:object="${FormContent}" method="post">
    	<div th:each="item : ${radioItems}">
        	<input type="radio" th:value="${item}" th:text="${item}"
        			th:field="*{content}" />
        </div>
        <p><input type="submit" value="送信" /> </p>
    </form>
  </body>
</html>

formタグで th:object="${FormContent}" と指定することで,フォームに入力された内容をjavaの FormContents クラスに格納することができるようになります.

また,divタグで th:each="item : ${radioItems}" を指定することで,[“選択肢1”, “選択肢2”]を順番に表示できます.

入力画面はこのように表示されます.

選択肢1を選択して送信ボタンをクリックすると,ターミナルに以下の文字列が表示されます.

//FormController.javaのformResultメソッドが起動
選択肢1が選択されました

チェックボックスの複数選択を扱う方法

次はチェックボックスを用いて,複数選択に対応できるようにします.コードを変更するのは以下の2つのファイルです.

  • Content.java
  • radioForm.html

Content.java

package com.example.helloworld;

import lombok.Data;
//getter, setterの記述を省略
@Data 
public class FormContents {
	//フィールドの定義
	private String content;
  private String[] contents;
	//コンストラクタ
	public FormContents() {};
}

変えたのは9行目の一箇所のみです.Stringの配列をフィールドとして追加しました.

Form.html

変えるのはinputタグの中の2箇所だけです.

  • type="radio" から type="checkbox"
  • th:field="*{content}" から th:field="*{contents}"
<html xmlns:th="https://www.thymeleaf.org">
  <head>
    <meta charset="UTF-8" />
  </head>
  <body>
    <form action="#" th:action="@{/form}" th:object="${FormContent}" method="post">
    	<div th:each="item : ${radioItems}">
        	<input type="radio" th:value="${item}" th:text="${item}"
        			th:field="*{contents}" /> <!-- content から contents へ変更.-->
        </div>
        <p><input type="submit" value="送信" /> </p>
    </form>
  </body>
</html>

html画面は選択項目がチェックボックスになっていることを確認できます.

チェックボックスの画面

この画面で2つの選択肢をチェックして送信ボタンをクリックすると,ターミナルに以下の文字列が表示されます.java側でチェックボックスの項目を操れるようになりました.

//FormController.javaのformResultメソッドが起動
選択肢1,選択肢2が選択されました

まとめ

ラジオボタン,チェックボックスを使ったやり取りについてまとめました.

FromController.java の formResult メソッドに処理を追加することで,本記事のコードを土台にしてより多くのことを実装できるはずです.

Java
スポンサーリンク