🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

JSP

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

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

Java

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

ラジオボタン

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

Q&A

解決済

1回答

1607閲覧

未選択でのposの値が0でわたってしまう。

naotaro0704

総合スコア19

Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

JSP

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

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

Java

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

ラジオボタン

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

0グッド

0クリップ

投稿2019/10/07 00:58

前提・実現したいこと

削除処理の工程で躓いています。
ラジオボタン未選択のときにエラー処理を行いたいのですが、今現在未選択のときはposに値として0がわたっています。これですと削除処理が正常?に行われてしまいます。未選択のときに削除処理を行わせないようにするにはどうしたらよいでしょうか。

プログラミング初心者でへんなこと聞いていたらすみません。

該当のソースコード

SalesSystemController.java

java

1 2@Controller 3@RequestMapping(value = "/system") 4public class SalesSystemController { 5 6 private static final Logger logger = LoggerFactory.getLogger(SalesSystemController.class); 7 8 /** Stringの定数として次の3つを定義する */ 9 private static final String INIT = "init"; 10 private static final String ADD = "add"; 11 12 /** メッセージと定義 */ 13 14 private static final String DELMSG = "選択された明細行を削除しました。"; 15 private static final String REMMSG = "明細行を選択してください。"; 16 17 18 19 /** 明細追加画面での削除押下時の処理 */ 20 @RequestMapping(params = "remove") 21 public String remove(SalesForm form, BindingResult result, Model model) { 22 23 /** 24 * RecordManagerのitemListを取得 itemListという名前でmodelに登録する。 25 */ 26 model.addAttribute("ItemList", RecordManager.getItemList()); 27 /** 28 * formのquantityを取得し、addDataという名前でmodelに登録する。 29 */ 30 model.addAttribute("addData", form.getQuantity()); 31 32 /** ラジオボタン選択による条件分岐 */ 33 34 /** ラジオボタンを選択せずに削除ボタンを押下した時の処理 */ 35 if(result == null) { 36 /** 37 * RecordManagerのselectLisitを取得し、allListという名前でmodelに登録する。 38 */ 39 model.addAttribute("selectList",RecordManager.getSelectList()); 40 /** 41 * RecordManagerにnameListを作成 nameListという名前でmodelに登録する。 42 */ 43 model.addAttribute("ItemList", RecordManager.getItemList()); 44 /** 45 * formのquantityを取得し、addDataという名前でmodelに登録する。 46 */ 47 model.addAttribute("addData", form.getQuantity()); 48 /** 49 * RecordManagerのtotalを取得しtotalという名前でmodelに登録する。 50 */ 51 model.addAttribute("total", RecordManager.getTotal()); 52 /** 53 * REMOVEをmessage5という名前でmodelに登録する。 54 */ 55 model.addAttribute("message5", REMMSG); 56 /** 57 * 明細追加画面へ 58 */ 59 return ADD; 60 61 } 62 /** ラジオボタンを選択して削除ボタンを押下した時の処理 */ 63 else { 64 /** 削除処理 */ 65 66 System.out.println(form.getPos()+"from"); 67 68 /** 69 * fromのposを取得しmodelに格納する。 70 */ 71 model.addAttribute("pos",form.getPos()); 72 /** 73 * RecordManaagerのremoveメソッドを実行させる。 74 */ 75 RecordManager.remove(form.getPos()); 76 77 /** 商品の残りの数による条件分岐 */ 78 79 /** 売上明細の残りが1件以上の処理 */ 80 if (RecordManager.getSelectList().size() > 0) { 81 /** 82 * DELETEをmessage4という名前でmodelに登録する 83 */ 84 model.addAttribute("message4", DELMSG); 85 /** 86 * RecordManagerのselectListを取得し、allListという名前でmodelに登録する。(売上明細) 87 */ 88 model.addAttribute("selectList", RecordManager.getSelectList()); 89 /** 90 * RecordManagerのitemListを取得 itemListという名前でmodelに登録する。 91 */ 92 model.addAttribute("ItemList", RecordManager.getItemList()); 93 /** 94 * RecordManagerのtotalを取得しtotalという名前でmodelに登録する。(合計) 95 */ 96 model.addAttribute("total", RecordManager.getTotal()); 97 /** 98 * 明細追加画面へ 99 */ 100 return ADD; 101 } 102 /** 売上明細の残りが0件のときの処理 */ 103 else { 104 /** 105 * DELETEをmessage4という名前でmodelに登録する 106 */ 107 model.addAttribute("message4", DELMSG); 108 /** 109 * 初期画面へ 110 */ 111 return INIT; 112 } 113 } 114 115 } 116 117} 118

RecordManager.java

java

1 2public final class RecordManager<selectList> { 3 4 /** 商品データ */ 5 private static List<Item> list = new ArrayList<>(); 6 private static List<Item> selectList = new ArrayList<>(); 7 private static Item item; 8 /** totalを定義 */ 9 private static int total = 0; 10 private static long salesId; 11 private static int pos; 12 13 static { 14 list.add(new Item("A00101", "油性ボールペン", 60, 0, 0, 0)); 15 list.add(new Item("A00201", "極細ボールペン", 120, 0, 0, 0)); 16 list.add(new Item("A00301", "蛍光ペン6色セット", 420, 0, 0, 0)); 17 list.add(new Item("A00401", "シャープペンシル", 100, 0, 0, 0)); 18 list.add(new Item("A00501", "鉛筆H(1ダース)", 400, 0, 0, 0)); 19 list.add(new Item("B00101", "無線綴ノートA4", 100, 0, 0, 0)); 20 list.add(new Item("B00201", "リングノートA4", 120, 0, 0, 0)); 21 list.add(new Item("B00301", "領収書", 350, 0, 0, 0)); 22 list.add(new Item("C00101", "はさみ(青)", 128, 0, 0, 0)); 23 list.add(new Item("C00201", "ステープラー", 338, 0, 0, 0)); 24 list.add(new Item("C00301", "2穴パンチ", 128, 0, 0, 0)); 25 list.add(new Item("C00401", "ゼムクリップ", 98, 0, 0, 0)); 26 list.add(new Item("C00501", "消しゴム", 58, 0, 0, 0)); 27 } 28 29 /** 商品名 */ 30 public static List<Item> selectItem(String id, int quantity,int pos) { 31 32 for (int i = 0; i < list.size(); i++) { 33 34 if (id.equals(list.get(i).getId())) { 35 pos = selectList.size(); 36 37 /** Itemを再定義 */ 38 Item item = new Item(id,list.get(i).getName(), list.get(i).getPrice(), quantity, 39 quantity * list.get(i).getPrice(),pos); 40 41 selectList.add(item); 42 43 /** subtotalを定義 */ 44 int subtotal = quantity * list.get(i).getPrice(); 45 total = total + subtotal; 46 System.out.println(pos+"I"); 47 48 break; 49 } 50 51 } 52 53 return selectList; 54 55 } 56 57 58 59 /** 選択した売上明細を削除 */ 60 public static void remove(int pos) { 61 /** int型jを定義しselectListの要素内で繰り返し処理*/ 62 for (int j = 0; j < selectList.size();j++) { 63 64 65 /** 選択したposと同じ順番の要素をselectList内から探す*/ 66 if (pos == selectList.get(j).getPos()){ 67//System.out.println(pos+"I"); 68 69 70 /** 合計からpos番目の小計を引く */ 71 total = total - selectList.get(j).getSubtotal(); 72 73System.out.println(selectList.get(j).getPos()+"R"); 74 75 /** selectListのj番目を削除 */ 76 selectList.remove(selectList.get(j).getPos()); 77 for(int k = 0; k<selectList.size();k++) { 78 selectList.get(k).setPos(k); 79 } 80 break; 81 82 } 83 84 } 85 } 86 87}

add.jsp

jsp

1<body> 2 <form:form modelAttribute="salesForm" action="/sales/system"> 3 <div class="header"> 4 <span class="titleName">直太郎オンラインショップ</span> 5 <div class="date"><%=LocalDate.now()%></div> 6 </div> 7 <div class="main"> 8 <div> 9 商品: 10 <form:select path="id"> 11 12 <form:options items="${ItemList}" itemValue="id" itemLabel="name" /> 13 14 </form:select> 15 16 <br /> 17 </div> 18 <div> 19 <span class="itemQuantity">点数:</span> 20 <form:input path="quantity" size="20" /> 21 </div> 22 23 <div class="add"> 24 <div> 25 <input type="submit" name="addition" value="明細追加" /> 26 </div> 27 </div> 28 </div> 29 30 <br> 31 <div class="message"> 32 <font color="#ff0000"> <c:out value="${message1}" /> 33 </font> <font color="#1e90ff"> <c:out value="${message2}" /> <font 34 color="#1e90ff"> <c:out value="${message4}" /> 35 </font> 36 </font> <font color="#ff0000"> <c:out value="${message5}" /> 37 </font> 38 </div> 39 <br> 40 41 42 43 <div class=""> 44 <span class="details">売上明細</span> 45 46 <table class="product"> 47 48 <tr> 49 <th>削除</th> 50 <th>商品ID</th> 51 <th>商品名</th> 52 <th>単価</th> 53 <th>点数</th> 54 <th>小計</th> 55 </tr> 56 <c:forEach items="${selectList}" var="selectList" varStatus="status"> 57 <tr> 58 <th class="itemradiobtn"><form:radiobutton path="pos" 59 label="" value="${selectList.pos}" /></th> 60 <th class="id">${selectList.id}</th> 61 <th class="name">${selectList.name}</th> 62 <th class="price">${selectList.price}</th> 63 <th class="quantity">${selectList.quantity}</th> 64 <th class="subtotal">${selectList.subtotal}</th> 65 <th class="pos">${selectList.pos}</th> 66 </tr> 67 </c:forEach> 68 </table> 69 </div> 70 71 <div class="total"> 72 合計: 73 <fmt:formatNumber groupingUsed="true"> 74 <c:out value="${total}" /> 75 </fmt:formatNumber> 7677 </div> 78 79 80 <div class="footer"> 81 82 <input type="submit" name="remove" value="削除" 83 onclick="remove_row(this)" /> <input type="submit" name="firm" 84 value="確定" /> 85 </div> 86 87 </form:form> 88 89</body>

SalesForm.java

java

1 /** 商品id */ 2 private String id; 3 /** 商品名 */ 4 private String name; 5 /** 単価 */ 6 private int price; 7 /** 個数 */ 8 @NotNull 9 @Min(1) 10 private int quantity=1; 11 /** 小計 */ 12 private int subtotal; 13 @NotNull 14 private int pos; 15 16 17 18 19public SalesForm() { 20 21}

Item.java

java

1public class Item { 2 3 /** 商品id */ 4 private String id; 5 /** 商品名 */ 6 private String name; 7 /** 単価 */ 8 private int price; 9 /** 個数 */ 10 private int quantity; 11 /** 小計 */ 12 private int subtotal; 13 14 private int pos; 15}

試したこと

未選択時の値変更させればいいと思ったので、posの初期値をnullに使用としましたがint型ではnullは解決できないとエラーが出てしまいました。

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

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

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

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

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

guest

回答1

0

ベストアンサー

posをInteger型に変更。

投稿2019/10/07 01:05

tetutetu

総合スコア419

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

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

tetutetu

2019/10/07 01:09

なんかしばらく前に このままじゃ未選択時に0が渡るからrequiredかcheckedつければ…みたいな話したような気もしますが。 ユーザ側が悪意ある行動をとらないの前提ならrequiredにするだけで解決するんですけどね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問