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

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

新規登録して質問してみよう
ただいま回答率
85.48%
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回答

792閲覧

データの受け渡しについて

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/09/26 04:21

編集2019/09/27 00:13

前提・実現したいこと

削除処理でのデータの受け取りについてです。
削除ボタンがsubmitされてformにposのデータが格納されているのは確認できました。RecordManagerでremoveメソッドを定義しましたがgetPos()に値が渡っておらず正常な削除処理が行われていません。
removeメソッドのselectList.get(j).getPos()に値がわたっていないので(全て0の状態)、selectList内にposを定義するか、そもそも別の物(idやname)で値を受け取る方法を考えてみましたが結果は変わらずでした。

該当のソースコード

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 private static final String FIX = "fix"; 12 /** メッセージと定義 */ 13 private static final String ERRMSG = "1以上の数字を入力してください。"; 14 private static final String ADDMSG = "明細に追加しました。"; 15 private static final String FIXMSG = "以下のように売上登録しました。"; 16 private static final String DELMSG = "選択された明細行を削除しました。"; 17 18~省略~ 19 20 /** 削除処理 */ 21//ここでformに格納されているのを確認できた。 22 System.out.println(form.getPos()+"from"); 23 24 /** 25 * fromのposを取得しmodelに格納する。 26 */ 27 model.addAttribute("pos",form.getPos()); 28 /** 29 * RecordManaagerのremoveメソッドを実行させる。 30 */ 31 RecordManager.remove(form.getPos()); 32 33 /** 商品の残りの数による条件分岐 */ 34 35 /** 売上明細の残りが1件以上の処理 */ 36 if (RecordManager.getSelectList().size() > 0) { 37 /** 38 * DELETEをmessage4という名前でmodelに登録する 39 */ 40 model.addAttribute("message4", DELMSG); 41 /** 42 * RecordManagerのselectListを取得し、allListという名前でmodelに登録する。(売上明細) 43 */ 44 model.addAttribute("selectList", RecordManager.getSelectList()); 45 /** 46 * RecordManagerのitemListを取得 itemListという名前でmodelに登録する。 47 */ 48 model.addAttribute("ItemList", RecordManager.getItemList()); 49 /** 50 * RecordManagerのtotalを取得しtotalという名前でmodelに登録する。(合計) 51 */ 52 model.addAttribute("total", RecordManager.getTotal()); 53 /** 54 * 明細追加画面へ 55 */ 56 return ADD; 57 } 58 /** 売上明細の残りが0件のときの処理 */ 59 else { 60 /** 61 * DELETEをmessage4という名前でmodelに登録する 62 */ 63 model.addAttribute("message4", DELMSG); 64 /** 65 * 初期画面へ 66 */ 67 return INIT; 68 } 69 } 70 71 72 73} 74

RacordManager.java

java

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

SalesForm.java

java

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

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="${status.index}" /></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//selectListにposを定義したのがこれです。 66 <th class="pos" style="display:none">${status.index}</th> 67 </tr> 68 </c:forEach> 69 </table> 70 </div> 71 72 <div class="total"> 73 合計: 74 <fmt:formatNumber groupingUsed="true"> 75 <c:out value="${total}" /> 76 </fmt:formatNumber> 7778 </div> 79 80 81 <div class="footer"> 82 83 <input type="submit" name="remove" value="削除" 84 onclick="remove_row(this)" /> <input type="submit" name="firm" 85 value="確定" /> 86 </div> 87 88 </form:form> 89

Item.java

java

1public class Item { 2 private String id; 3 private String name; 4 private int price; 5 private int quantity; 6 private int subtotal; 7 private int pos; 8 9 @Override 10 public int hashCode() { 11 final int prime = 31; 12 int result = 1; 13 result = prime * result + ((id == null) ? 0 : id.hashCode()); 14 return result; 15 } 16 17 @Override 18 public boolean equals(Object obj) { 19 if (this == obj) { 20 return true; 21 } 22 if (obj == null) { 23 return false; 24 } 25 if (!(obj instanceof Item)) { 26 return false; 27 } 28 Item other = (Item) obj; 29 if (id == null) { 30 if (other.id != null) { 31 return false; 32 } 33 } else if (!id.equals(other.id)) { 34 return false; 35 } 36 return true; 37 } 38/*それぞれのgetterとsetterを生成してあります。*/ 39 40 public Item(String id, String name, int price, int quantity, int subtotal, int pos) { 41 this.id = id; 42 this.name = name; 43 this.price = price; 44 this.quantity = quantity; 45 this.subtotal = subtotal; 46 this.pos = pos; 47 } 48}

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

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

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

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

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

guest

回答1

0

selectList.get(j).getPos() で 取得できる pos の値は どこで格納されているのでしょうか。
それさえ調べれば、なぜ0になってしまうのかがわかるでしょう。

Listで指定した位置のものを削除したいのであれば、selectList.get(j) で削除できるので、わざわざ位置を示す変数を Item に持つ必要はないのでは。

投稿2019/09/26 04:46

A-pZ

総合スコア12011

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

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

naotaro0704

2019/09/26 05:34

回答ありがとうございます。 値自体が取得されてないから、どこにも格納されず0になってしまう と考えていたのですが、間違っていますか。
A-pZ

2019/09/26 09:03

そもそも、selectList.get(j) で取得されている Item がもつ、posの値は"どこで"定義していますか? Itemクラスの実装がこのソースコードに書かれていないので判別はできませんが、selectListの中にあるItemがもつposの値が0のままだからなのではないでしょうか。
naotaro0704

2019/09/27 00:14

Item.javaを追加しました。 自分では定義してあると思っているのですが、これは定義されているといえないのでしょうか。
A-pZ

2019/09/27 06:11

removeメソッドで削除しているのは selectListの内容なので、一度 selectListの中身をデバッグモードなどで確認されてはいかがでしょうか。HTMLのth:eachで繰り返している内容を見ても <th class="pos" style="display:none">${status.index}</th> と、実際の値を取得するのではなく、繰り返し処理用の変数から値を表示しているので、posには値が入っているかを確認できません。 ここからは推察ですが、selectListに格納するItemでposの値を定義していないからではないでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問