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

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

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

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

Q&A

0回答

4272閲覧

SpringMVC form:radiobutton タグについて

tanakamoe

総合スコア10

Spring

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

0グッド

0クリップ

投稿2019/01/25 06:57

編集2019/01/28 01:31

Spring MVCの form:radiobutton について

Spring MVC の form:radiobutton タグについて、
未選択状態をデフォルトにする方法を教えていただきたいです。

下記のコードでは、デフォルトで選択された状態となります。

該当のソースコード

<%@ page session = "false" language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.time.LocalDate" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <!DOCTYPE html> <html> <head> <link rel="stylesheet" type="text/css" href="/sales/resources/common.css" /> <title>明細追加画面</title> </head> <body> <form:form modelAttribute="salesForm" action="/sales/system"> <div class="header"> <span class="titleName">オンラインショップ</span> <div class="date"><%= LocalDate.now() %></div> </div> <div class="main"> <span class="name">商品:</span> <select name="name"> <c:forEach items="${itemList}" var="item" varStatus="status"> <option value="${item.name}">${item.name}</option> </c:forEach> </select> <br> <span class="quantity">点数:</span> <form:input path="quantity" size="5" value="1" /> <div class=""> <input type="submit" name="add" value="明細追加"> </div> </div> </form:form> <form:form modelAttribute="salesForm" action="/sales/system"> <div class="main2"> <br> <br> <div class="message"> <c:out value="${message}" /> </div> <br> <br> 売上明細 <br> <table> <tr> <th>削除</th><th>商品ID</th><th>商品名</th><th>単価</th><th>点数</th><th>小計</th> </tr> <c:forEach items="${newList}" var="newList" varStatus="status"> <tr> <th> <form:radiobutton path="name" label="" value="${newList.name}"/> </th> <th>${newList.id}</th><th>${newList.name}</th><th>${newList.price}</th> <th>${newList.quantity}</th><th>${newList.subtotal}</th> </tr> </c:forEach> </table> 合計:<fmt:formatNumber value="${total}" groupingUsed="true" />円 </div> <div class="footer"> <input type="submit" name="delete" value="削除"/> <input type="submit" name="fix" value="確定"> </div> </form:form> </body> </html>

出力したHTML

イメージ説明

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

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

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

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

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

wwbQzhMkhhgEmhU

2019/01/25 14:32

radiobuttonってチェックボックスではなくて、複数の中から1つを選ぶ要素ですよ。 path="name"のradiobuttonが最低あともう一つ並んでいないと意味がないと思います。
tanakamoe

2019/01/28 00:01

コメントありがとうございます! 実際には、 forEach タグで繰り返し処理をしています。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー <table>  <tr>   <th>削除</th><th>商品ID</th><th>商品名</th><th>単価</th><th>点数</th><th>小計</th>  </tr>  <c:forEach items="${newList}" var="newList" varStatus="status">  <tr>   <th>    <form:radiobutton path="name" label="" value="${newList.name}" checked="false"/>   </th>   <th>${newList.id}</th><th>${newList.name}</th><th>${newList.price}</th>   <th>${newList.quantity}</th><th>${newList.subtotal}</th>  </tr>  </c:forEach> </table> ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
wwbQzhMkhhgEmhU

2019/01/28 00:32

checked属性を外したらどうなりますか?
tanakamoe

2019/01/28 00:47

checked属性を外しても、falseとした場合と同じ挙動になります。 ラジオボタンがONになった状態になります。
wwbQzhMkhhgEmhU

2019/01/28 00:54

生成されたHTMLはどうなっていますか? taglibの中見ないと分からないかも。。。
tanakamoe

2019/01/28 01:26

出力したHTMLを上記質問内容に追加いたしました。 taglib の中身とは。。。?すみません、初心者なもので。。。
wwbQzhMkhhgEmhU

2019/01/28 01:27

いや、画像じゃなくて、checked属性がどう生成されているか見たかったんですが。。。 あと、radiobutton要素からchecked属性は外してください。
tanakamoe

2019/01/28 01:39

教えてくださりありがとうございます! JSPのソースコード全体を上記に載せました。
tanakamoe

2019/01/28 01:40

taglib の中身とは、どこから確認できるのでしょうか。。。
wwbQzhMkhhgEmhU

2019/01/28 02:04

ええーっと…今ので分からないのだと説明難しいです。 JSP→Servletという処理は把握していらっしゃいますか?JSPはHTMLを拡張したような構文のファイルです。JSPはビルドされた際にサーブレット(Javaのクラスです)に変換されて、それをコンパイルしてクラスファイルになります。これがbeanの情報を元にHTMLに変換してるのです。よくあるテンプレート処理ですね。JSPはHTMLのタグを拡張した文法なので、JSPから変換されたサーブレットはその専門的なタグを処理するときにtaglibを呼び出すわけです。taglibはJavaのライブラリなので、ソースコードもあって、上に書いたリンクのようなソースコードがform:radiobuttonを扱っている部分ということになります。このソースコードがtaglibの中身です。 本来は実際に使っているライブラリのソースコードを見ないといけない(バージョンが違ってたり、中のコードを編集したものを使っている可能性があるので)のですが、大まかな動きは同じということで、上のリンクのコードを見てました。
wwbQzhMkhhgEmhU

2019/01/28 02:07

ちなみに私がtaglibのソースコードまで見てるのは、私がSpringMVCを使ってないため、ソースコードや仕様からしか見ることができなかったからです。仕様はそこまで詳しくなかったので、コードを見ていたというわけです。実際に動いているコードがあるなら、いろいろ試す方が先ですよ。
wwbQzhMkhhgEmhU

2019/01/28 02:27

なんとなくですが、newList.nameのnameという名前がまずい気がします。そのために、生成された全てのinputでcheckedが付いちゃってるんじゃないかと。。。
wwbQzhMkhhgEmhU

2019/01/28 02:28

あと、HTML(ソース)早く貼ってください。
wwbQzhMkhhgEmhU

2019/01/28 02:43

それから、path="name"をpath="hoge"とかで試せたら試してみてくださいね。
wwbQzhMkhhgEmhU

2019/01/28 13:49

結局自分で一度作ってみましたが、私が作ったものだと、普通に制御出来たので、現象が違います。 最終的にはSalesFormのnameプロパティに商品名を入れることで、ラジオボタンの制御ができることを確認しました。空にしたり、存在しない商品名ならチェックがどこにも付きません。 昼間疑ってたのはコードの読み違いだったのか、合わせても再現はしませんでした。 なお、多分name属性に指定すべきは商品IDです。また、ループに使用している変数名がbeanに指定される変数名と被っていたのも良くありません。 以上で、私の方からの報告は終わりにさせて頂きます。
tanakamoe

2019/01/29 01:28 編集

私の理解と作業が追い付かず、対応が遅くなりすみませんでした。 また親身に考えてくださり大変感謝しております。 >多分name属性に指定すべきは商品IDです。 →ご指摘の通りに修正したら、本件解決できました。 本当にありがとうございました。。。!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問