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

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

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

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

MVC

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

Java

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

Q&A

0回答

636閲覧

SpringMVC データの受け渡し

kakudeath

総合スコア6

Java EE

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

MVC

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

Java

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

1グッド

1クリップ

投稿2018/03/11 11:59

編集2018/03/11 14:48

前提・実現したいこと

閲覧いただきありがとうございます。

SpringMVCフレームワークを使用しています

JavaEEを使用してウェブショッピングサイトのようなものを作成しています。
画面は初期画面(init.jsp)と明細追加画面(add.jsp)と確認画面(質問には直接関係ありません)があり、今回初期画面と明細追加画面の動作が思った通りにならないため質問させていただきました。長文になりますがどうかよろしくお願いいたします。
希望する動作としては以下の通りです。
1.初期画面に「商品」プルダウン、「点数」テキストボックス、[明細追加]ボタンを設置。
2..「商品」プルダウンで商品を選び、「点数」テキストボックスに購入したい数を記入し[明細追加]ボタンを押下する。
3.明細追加画面に遷移する。
4.明細追加画面には初期画面同様「商品」リスト、「点数」テキストボックス、[明細追加]ボタンがあり、下部に売上明細スペースが表記される。
5.売上明細スペースには「商品 ID」「商品名」「単価」「点数」「小計」を表示する。
6..明細追加画面の「商品」リスト、「点数」テキストボックスに初期画面と同様の操作をし「明細追加」ボタンを押下すると、売上明細スペースにその情報が追加される。

以上の5~6が今回の質問箇所の動作概要になります。

時間をかけても日時が経っていくばかりなので、皆様の協力を得たいと考えこの度質問いたしました。
不明箇所・失礼な箇所がありましたらどうぞご指摘ください。

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

問題1.売上明細スペースの「商品 ID」「商品名」「単価」が表示されるが「点数」及び「小計」が0と表記されます。
1.Manager.javaで「商品名」を引数として「商品 ID」「商品名」「単価」データを受け取っているのは確認できました。
2.「点数」データはformで取得できていました。
3.「点数」及び「小計」はデフォルトデータでは0であり、そのデータをそのまま拾ってきています。
希望する動作:「点数」と「小計」のデータを加えて表記したいです。どのように処理を行えばデータを加えることができるでしょうか。

問題2.明細追加画面の「商品」リスト、「点数」テキストボックスに初期画面と同様の操作をし「明細追加」ボタンを押下すると例外がなげられるます。
1.getNameで名前が前回の分までセットされている。(例:初期画面で「ボールペン」を選択し、明細追加画面で「消しゴム」を選択し明細追加画面で「明細追加」ボタンを押下した場合、「消しゴム、ボールペン」で名前が取得されてしまうため例外となります。
希望する動作:.上記の例で行くと消しゴムだけを取得したいです。

該当のソースコード

Manager.javaの一部

Java

1public final class Manager { 2 3 /** 商品データ */ 4 private static List<Item> list = new ArrayList<>(); 5 private static List<Item> selectList = new ArrayList<>(); 6 private static Item item; 7 8 static { 9 list.add(new Item("X10100", "ボールペン", 90, 0, 0)); 10 list.add(new Item("X20100", "タッチペン", 120, 0, 0)); 11 list.add(new Item("X30100", "消しゴム",80, 0, 0)); 12 } 13 14 public static List<Item> selectProduct(String name) { 15 Item item = new Item("",name,0,0,0); 16 selectList.add(list.get(list.indexOf(item))); 17 return selectList; 18 } 19 20 public static String[] makeNameList() { 21 String[] nameList = new String[list.size()]; 22 for (int i = 0; i < list.size(); i++) { 23 nameList[i] = (list.get(i)).getName(); 24 } 25 return nameList; 26 } 27 28 public static List<Item> getItemList() { 29 return list; 30 } 31 32 public static void setItemList() { 33 list.set(list.indexOf(item), item); 34 } 35}

Item.javaの一部

Java

1 /** 商品id */ 2 private String id; 3 /** 商品名 */ 4 private String name; 5 /** 単価 */ 6 private int price; 7 /** 個数 */ 8 private int quantity; 9 /** 小計 */ 10 private int subtotal; 11 以下、上記のコンストラクタとgetterとsetterがあります

ShopForm.javaの一部

Java

1 /** 商品id */ 2 private String id; 3 /** 商品名 */ 4 private String name; 5 /** 単価 */ 6 private int price; 7 /** 個数 */ 8 private int quantity; 9 /** 小計 */ 10 private int subtotal; 11 12 以下、上記のコンストラクタとgetterとsetterがあります。

ShopSystemController.java

Java

1@Controller 2@RequestMapping(value = "/system") 3public class ShopSystemController { 4 private static final String INIT = "init"; 5 private static final String ADD = "add"; 6 private String message; 7 8 @RequestMapping(value = "/start") 9 public String init(ShopForm form, Model model) { 10 model.addAttribute("allList", Manager.getItemList()); 11 model.addAttribute("message", message); 12 model.addAttribute("nameList", Manager.makeNameList()); 13 return INIT; 14 } 15 16 /** 17 * 初期画面から呼ばれる。 18 * @param form フォームオブジェクト 19 * @param model モデルオブジェクト 20 * @return Viewとしてadd.jspを指定 21 */ 22 @RequestMapping(params = ADD) 23 public String add(ShopForm form, BindingResult result, Model model){ 24 model.addAttribute("allList", Manager.selectProduct(form.getName())); 25 model.addAttribute("nameList", Manager.makeNameList()); 26 model.addAttribute("message", "明細追加完了"); 27 return ADD; 28 } 29}

init.jspのbody部

jsp

1<body> 2 <form:form modelAttribute="salesForm" action="/sales/system"> 3 商品:<form:select path="name" items="${nameList}" /><br/> 4 点数:<form:input path="quantity" value = "1"/><br/> 5 <input type="submit" name="add" value="明細追加" /> 6 </form:form><br/> 7 8 <div class="message"> 9 <c:out value="${message}" /> 10 <form:errors path="id" /> 11 </div> 12</body>

add.jspのbody部

JSP

1<body> 2 <form:form modelAttribute="salesForm" action="/sales/system"> 3 商品:<form:select path="name" items="${nameList}" /><br/> 4 <div> 5 <span>点数:</span><form:input path="quantity" value = "1"/> 6 </div><br/> 7 <input type="submit" name="add" value="明細追加" /><br/> 8 <div class="message"><c:out value="${message}" /><br/> 9 10 <form:hidden path="name" /> 11 <table> 12 <tr><th>削除</th><th>商品ID</th><th>商品名</th><th>単価</th><th>点数</th><th>小計</th></tr> 13   <c:forEach items="${allList}" var="list"> 14 <tr> 15 <td>${list.id}</span></td> 16    <td>${list.name}</td> 17   <td>${list.price}</td> 18   <td>${list.quantity}</td> 19   <td>${list.subtotal}</td> 20 </tr> 21   </c:forEach> 22 </table> 23 24   <div class = "btnFild"> 25 <input type="submit" name="remove" value="削除" /> //この件は大丈夫です 26 <input type="submit" name="firm" value="確定" /> //この件も大丈夫です 27 </div> 28 </form:form> 29</body>

試したこと

問題1 既述通りですが.「点数」データはformに渡せているのは確認できました。
selectProductに.「点数」データを渡して、試行錯誤したのですがうまくいきませんでした。

問題2 何故、2つ取れてしまっているかわからないため対処できませんでした。

補足情報(FW/ツールのバージョンなど)

構築環境:Eclipse Java EE IDE for Web Developers.
Version: Mars.2 Release (4.5.2)
ローカルホストTomcat8

yukapome789👍を押しています

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

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

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

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

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

yukapome789

2018/03/11 14:06 編集

全部読めてないのですが気になったところ→【1】これSpringMVCフレームワークを使ってますよね?最初に書いたほうが良いです。【2】Managerクラス内のメンバ変数にstatic付いてますが、webアプリケーションの特にユーザによって頻繁に変更される変数でやっちゃうと「Aさんが変更した内容がBさんに反映される」なんてことが起きるのでstaticつけるところは見極めないとだめですよ。【3】コードを質問文に書く時は、入力欄の上のアイコンから</>っての選択して、読む人に読みやすい形にしましょう。インデントもちゃんとしましょう。
kakudeath

2018/03/11 14:50

コードの書式など必要なことは調べておくべきでした。staticの方については少し考えます。ご丁寧にありがとうございます。
A-pZ

2018/03/27 05:22

商品を選択した個数に応じた小計を計算している箇所がないようです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問