質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Thymeleaf

Thymeleaf(タイムリーフ)とは、Java用のテンプレートエンジンで、特定のフレームワークに依存せず使用することが可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

2284閲覧

Mapの値をラジオボタンで表示、初期状態で選択や選択された値の保持をしたい。

sga11

総合スコア3

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Thymeleaf

Thymeleaf(タイムリーフ)とは、Java用のテンプレートエンジンで、特定のフレームワークに依存せず使用することが可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2021/10/19 09:11

編集2021/10/22 03:36

前提・実現したいこと

日付計算アプリを作成しております。

部品のひとつで、初日を「数える」「数えない」のラジオボタンを作りまして、
「数えない」場合は日数+0、「数える」場合は-1の計算処理を行えるよう実装いたしました。

実現したいことは、初期値を「数えない」のラジオボタンに設定することと、
計算処理後も選択したボタンで留まるようにしたいです。

発生している問題・エラーメッセージ

今回Mapを使い、HTML側に送っているため、checked属性を使用すると、Mapの最後に呼び出される「数える」のボタンにだけ初期値が設定されてしまいます。

該当のソースコード

Java

1@RequestMapping(value = "/daycount", method = RequestMethod.POST) 2 public String submit(Model model, @Validated DayCountForm daycountform, BindingResult result) { 3 4 5 String strRadio = daycountform.getSelectDayCount(); 6 model.addAttribute("selectDayCount",strRadio); 7 8 int numRadio =Integer.parseInt(strRadio); 9     model.addAttribute("selectDay",getSelectDay()); 10 11    return "daycount"; 12 } 13 14 15 Map<String, String> getSelectDay() { 16 Map<String, String> selectDay = new LinkedHashMap<String, String>(); 17 18 selectDay.put("0", "数えない"); 19 selectDay.put("-1", "数える"); 20 21 return selectDay; 22 } 23}

Java

1public class DayCountForm { 2 3 4 private String selectDayCount; 5 6 public String getSelectDayCount() { 7 return selectDayCount; 8 } 9 10 public void setSelectDayCount(String selectDayCount) { 11 this.selectDayCount = selectDayCount; 12 }

HTML

1 初日を<span th:each="select :${selectDay}"> <input type="radio" 2 name="selectDayCount" th:value="${select.key}" th:text="${select.value}" 3 checked="checked">

試したこと

th:selected・・・セレクトボックスでの使用のため動作せず。

th:checked・・・チェックボックスでの使用のため動作せず。

checked・・・th:eachでMapを呼びだしているため、最後に呼び出された値に初期設定が入ってしまう。

まだ初学者のため、文章も伝わりにくいところが多々あると思いますが、よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

・MapをHTMLに送り、初期画面表示時で「数えない」を選択させる。
・処理後も選択した値のボタンが保持される。

2つの条件を満たすことができたので、
下記に記載いたします。

Java

1//初期値(String型)を与えた変数をHTMLへ送る。 2String selectDay = "0"; 3 4model.addAttribute("selectDayCount", selectDay); 5model.addAttribute("select", getSelect()); 6 7return "daycount";

Java

1//ラジオボタンの値をMapに格納 2Map<String, String> getSelect() { 3 Map<String, String> select = new LinkedHashMap<String, String>(); 4 5 select.put("0", "数えない"); 6 select.put("-1", "数える"); 7 8 return select; 9 }

HTML

1初日を<span th:each="select :${select}" > 2 3 <input type="radio" name="selectDayCount" th:value="${select.key}" th:text="${select.value}" 4 th:checked="${select.key == selectDayCount}" /> 5 </span>

投稿2021/10/22 03:34

sga11

総合スコア3

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

th:checkedはradioでも機能します。
th:checkedは真偽値によって「checked="checked"」を表示する/しないを制御できるので
select.keyが0なら表示するよう条件付すれば良いです。

5.5 固定値の真偽値属性
https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf_ja.html#%E5%9B%BA%E5%AE%9A%E5%80%A4%E3%81%AE%E7%9C%9F%E5%81%BD%E5%80%A4%E5%B1%9E%E6%80%A7

19 Appendix B:式ユーティリティーオブジェクト
文字列 : null安全な比較
https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf_ja.html#%E6%96%87%E5%AD%97%E5%88%97

投稿2021/10/20 00:22

Luice

総合スコア771

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sga11

2021/10/20 01:36

ご回答ありがとうございます。 「th:checked="${select.key}== 0"」を追加することで、 「数えない」ほうのボタンを初期値として設定することができました。 別のボタンを選択しても処理後に必ず「数えない」ボタンが選択されてしまうことはしょうがないんですかね、、、 Mapの値でラジオボタンを作成した場合、選択したボタンを保持させる方法がないか、もう少しいただいたURLで調べてみようと思います。
sga11

2021/10/20 03:09

先ほどの続き。 URLを確認させていただいて、 「th:checked="${select.key == selectDayCount}"」 上記の記述を追加し、選択値の判定を「0」か「‐1」かによって初期値に設定する流れを作ることができました。 現状の問題は、選択値の判定の後に初期値に設定されるので、初期画面では何も選択されていない状態で出てしまうので、 「th:checked="${select.key}== 0"」をうまく組み合わせられるかもう少し考えてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問