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

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

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

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

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

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

ラジオボタン

ラジオボタンはフォームに使われる要素のひとつであり、ユーザに限られた選択肢からひとつの答えを選んでもらうというものです。

Q&A

解決済

2回答

9297閲覧

ラジオボタンの初期値を未選択状態にしたい

Qingxuan

総合スコア7

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

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

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

ラジオボタン

ラジオボタンはフォームに使われる要素のひとつであり、ユーザに限られた選択肢からひとつの答えを選んでもらうというものです。

0グッド

0クリップ

投稿2020/11/06 06:06

前提・実現したいこと

売上明細から商品を削除する機能を作っています。ラジオボタンを選択し、削除ボタンを押したら商品が削除されるイメージです。削除の動作は実現できましたが、初期状態では、売上明細リストにラジオボタンがどっちでも選択されない状態にしたいです。今の状況は、商品を登録後、ラジオボタンが1つついてしまいます。
登録したらラジオボタンがついています

該当のソースコード

**add.jsp** <span>売上明細</span> <table class="table" id="table"> <tr> <th>削除</th> <th>商品ID</th> <th>商品名</th> <th>単価</th> <th>点数</th> <th>小計</th> </tr> <c:forEach items="${allList}" var="item" step="1" varStatus="status"> <tr> <td><form:radiobutton path="delNumber" value="${status.index}" /></td> <td>${item.id }</td> <td>${item.name }</td> <td>${item.price }</td> <td>${item.quantity}</td> <td>${item.subtotal }</td> </tr> </c:forEach> </table> <span>合計: <c:out value="${total}" />円 </span> **Controller** @RequestMapping(params = "remove") public String remove(SalesForm form, Model model, SessionStatus sessionStatus) { /**選択された商品が存在する場合、削除を行う*/ if (form.getAllList().size() > 1) { /** RecordManagerにItemListを格納する*/ model.addAttribute("ItemList", RecordManager.getItemList()); model.addAttribute("nameList", RecordManager.makeNameList()); model.addAttribute("allList", form.getAllList()); //選択されたラジオボタンの行番号を受け取り、行を削除する。 int count = form.getDelNumber(); form.getAllList().remove(count); model.addAttribute("total", RecordManager.calTotal(form.getAllList())); model.addAttribute("message", "選択された明細行を削除しました。"); return "add"; } else { /**選択された商品がない場合、初期画面に戻る*/ sessionStatus.setComplete(); model.addAttribute("ItemList", RecordManager.getItemList()); model.addAttribute("nameList", RecordManager.makeNameList()); return "init"; } } **SalesForm** public class SalesForm { private String goodsName; private String point; private int delNumber; //ほかのgetter setterを省略 public int getDelNumber() { return delNumber; } public void setDelNumber(int delNumber) { this.delNumber = delNumber; }

試したこと

こちらの回答を参考しましたが、解決方法わからかなったです。jspの書き方には問題なさそうですが、controllerでは何か足りないものってありますでしょうか?
ぜひ助言をお願いします。

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

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

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

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

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

guest

回答2

0

そのような、「1つもチェックしないことがありうる」状況でラジオボタンを使うというUI自体が不適当ではないかと考えます。

投稿2020/11/06 06:23

maisumakun

総合スコア145025

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

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

maisumakun

2020/11/06 06:23

初期状態で1つもチェックされない状態にしたとしても、「一度チェックすればクリアができない」という問題は解消できません。
Qingxuan

2020/11/06 07:19

ご回答ありがとうございました。UIが自分が設計しているわけではないので変えることはできないですね。。enuyさんのご指摘の通りこの問題解決できました。
guest

0

ベストアンサー

ラジオボタンが選択されているのはdelNumberに値が入っているのが原因です。
せっかくdelNumberにはsetterがあるので、それを活用してみてください。
というか初期値であれば変数宣言時に設定できますよね。

ちなみにdelNumberのvalueで使用するvarStatusプロパティを変えるともっと単純になります。

投稿2020/11/06 06:21

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Qingxuan

2020/11/06 06:55

ご回答ありがとうございます。 delNumberの初期値を0にセットすると、最初の1行目が常に選択されている状態になりました。何も選択されていない状態だとどうやってセットすればいいかわからないです。。 そして、おっしゃったvarStatusのすべてのプロパティを見ましたが、行番号を表したいので使えるのがindexとcountらしい。。 すみませんが、もうちょっと教えていただけませんか?
退会済みユーザー

退会済みユーザー

2020/11/06 06:58

現在初期値0で選択状態なんですよね。 それではvarStatusプロパティのindexとcountの違いは何でしょうか。 それが理解できれば簡単に解決すると思います。
Qingxuan

2020/11/06 07:16

ありがとうございます。countに変更したら初期値未選択の状態になりましたが、リストの最後の一行を削除すると500のエラーが出ました。 controllerでint count = form.getDelNumber()-1に変更したら解決できました。 int count = form.getDelNumber()-1; form.getAllList().remove(count); model.addAttribute("total", RecordManager.calTotal(form.getAllList())); model.addAttribute("message", "選択された明細行を削除しました。"); form.setDelNumber(0); return "add"; ご丁寧にありがとうございました!
退会済みユーザー

退会済みユーザー

2020/11/06 08:00

お役に立てて光栄です!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.53%

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

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

質問する

関連した質問