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

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

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

Spring MVCとは、Javaを用いてWebアプリケーションを開発できるフレームワーク。アーキテクチャにMVCを採用しており、画面遷移と入出力パラメータの受け渡しの基本的な機能の他、ユーザーの送信したパラメータに対する入力チェックなどさまざまな機能を持ちます。

Java

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

解決済

Java Spring 画面内で選択したアイテムをアイテム名で探しデータを取得したい

gamavone
gamavone

総合スコア3

Spring MVC

Spring MVCとは、Javaを用いてWebアプリケーションを開発できるフレームワーク。アーキテクチャにMVCを採用しており、画面遷移と入出力パラメータの受け渡しの基本的な機能の他、ユーザーの送信したパラメータに対する入力チェックなどさまざまな機能を持ちます。

Java

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

1回答

0評価

0クリップ

300閲覧

投稿2022/01/22 12:40

現在オンラインショップのプログラムを作成中です。
以下のinit.jsp(初期画面)とadd.jsp(明細追加画面)の両方にアイテム一覧を表示するプルダウンリストと[明細追加]ボタンがあり、[明細追加]ボタンを押すと選択したアイテム名が一致するデータをRecordManager.javaから探し、add.jspにデータをリストとして追加していく仕組みです。

init.jsp

<%@ 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"%> <!DOCTYPE html> <html> <head> <link rel="stylesheet" type="text/css" href="/sales/resouces/css/common.css" /> <title>オンラインショップ(初期画面)</title> </head> <body> <form:form modelAttribute="salesForm" action="/sales/system"> <div class="header"> <span class="titleName">初期画面</span> <span class="date"><%=LocalDate.now()%></span> </div> <div class="main"> <form:select path="goodsName" items="${goodsNameList}" /> <input type="submit" name="add" value="明細追加" /> </div> </form:form> </body> </html>

add.jsp

<%@ 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"%> <!DOCTYPE html> <html> <head> <link rel="stylesheet" type="text/css" href="/sales/resouces/css/common.css" /> <title>明細追加画面</title> </head> <body> <form:form modelAttribute="salesForm" action="/sales/system"> <div class="header"> <span class="titleName">明細追加画面</span> <span class="date"><%=LocalDate.now()%></span> </div> <div class="main"> <form:select path="goodsName" items="${goodsNameList}" /> <input type="submit" name="add" value="明細追加" /> </div> <table> <tr><th>商品ID</th><th>商品名</th><th>単価</th><th>点数</th><th>小計</th></tr> <c:forEach items="${allList}" var="list"> <tr> <td>${list.id}</td> <td>${list.name}</td> <td>${list.price}</td> <td>${list.quantity}</td> <td>${list.subtotal}</td> </tr> </c:forEach> </table> <div class="footer"> <c:out value="${salesForm.goodsName}" /> <form:hidden path="goodsName" /> <input type="submit" name="toInit" value="確定" /> </div> </form:form> </body> </html>

SalesSystemController.java

package jp.practice.sales; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.SessionAttributes; /** * Handles requests for the application home page. */ @Controller @RequestMapping(value = "/system") @SessionAttributes(types = {SalesForm.class}) public class SalesSystemController { private static final String INIT = "init"; private static final String ADD = "add"; /** * 起動時および登録完了時に呼ばれる。初期画面を表示する。 * @param form フォームオブジェクト * @param model モデルオブジェクト * @return Viewとしてinit.jspを指定 */ @RequestMapping(value = "/start") public String init(SalesForm form, Model model) { model.addAttribute("goodsNameList", RecordManager.makeGoodsNameList()); form.setGoodsName(RecordManager.getFirstGoodsName()); return INIT; } /** * 初期画面で明細追加を押した時に呼ばれる。追加商品を表示して確認を促す。 * @param form フォームオブジェクト * @param model モデルオブジェクト * @return viewとしてadd.jspを指定 */ @RequestMapping(params = "add") public String add(SalesForm form, Model model) { model.addAttribute("goodsNameList", RecordManager.makeGoodsNameList()); Item item = RecordManager.findItem(form.getGoodsName()); form.setGoodsName(item.getId()); model.addAttribute("allList", form.getAllList()); model.addAttribute("item", form.getAllList()); form.addToAllList(item); form.clear(); return ADD; } /** * 明細追加画面で確定を押した時に呼ばれる。初期画面表示へ遷移する。 * @param form フォームオブジェクト * @param model モデルオブジェクト * @return initメソッドへのリンクを指定 */ @RequestMapping(params = "toInit") public String toInit(SalesForm form, Model model) { return init(form, model); } }

SalesForm.java

package jp.practice.sales; import java.util.ArrayList; import java.util.List; public class SalesForm { private String goodsName; private int point; private String delNumber; private List<Item> allList = new ArrayList<>(); public SalesForm() { } /** * @return goodsName */ public String getGoodsName() { return goodsName; } /** * @param goodsName セットする goodsName */ public void setGoodsName(String goodsName) { this.goodsName = goodsName; } /** * @return point */ public int getPoint() { return point; } /** * @param point セットする point */ public void setPoint(int point) { this.point = point; } /** * @return delNumber */ public String getDelNumber() { return delNumber; } /** * @param delNumber セットする delNumber */ public void setDelNumber(String delNumber) { this.delNumber = delNumber; } /** * @return allList */ public List<Item> getAllList() { return allList; } /** * @param item */ public void addToAllList(Item item) { this.allList.add(item); } public void clear() { goodsName = null; } }

RecordManager.java

package jp.practice.sales; import java.util.ArrayList; import java.util.List; /** * 商品データ全体を保持するクラス */ public final class RecordManager { /** 商品データ */ private static List<Item> list = new ArrayList<>(); static { list.add(new Item("A00101", "油性ボールペン", 60, 0, 0)); list.add(new Item("A00201", "極細ボールペン", 120, 0, 0)); list.add(new Item("A00301", "蛍光ペン6色セット", 420, 0, 0)); list.add(new Item("A00401", "シャープペンシル", 100, 0, 0)); list.add(new Item("A00501", "鉛筆H(1ダース)", 400, 0, 0)); list.add(new Item("B00101", "無線綴ノートA4", 100, 0, 0)); list.add(new Item("B00201", "リングノートA4", 120, 0, 0)); list.add(new Item("B00301", "領収書", 350, 0, 0)); list.add(new Item("C00101", "はさみ(青)", 128, 0, 0)); list.add(new Item("C00201", "ステープラー", 338, 0, 0)); list.add(new Item("C00301", "2穴パンチ", 128, 0, 0)); list.add(new Item("C00401", "ゼムクリップ", 98, 0, 0)); list.add(new Item("C00501", "消しゴム", 58, 0, 0)); } /** * 引数で指定された商品名に一致する商品データを返却 * @param name 検索キーとなる商品名 * @return 検索結果の商品データ */ public static Item findItem(String goodsName) { int index = list.indexOf(new Item("", goodsName, 0,0,0)); return list.get(index); } /** * 全ての商品名のリストを返す。 * @return 商品名の配列 */ public static String[] makeGoodsNameList() { String[] goodsNameList = new String[list.size()]; for (int i = 0; i < list.size(); i++) { goodsNameList[i] = (list.get(i)).getName(); } return goodsNameList; } /** * プルダウンリストの初期値セットデータを取得する * @return 先頭の商品名 */ public static String getFirstGoodsName() { return list.get(0).getName(); } }

Item.java

package jp.practice.sales; public class Item { /** * @param id * @param name * @param price * @param quantity * @param subtotal */ public Item(String id, String name, int price, int quantity, int subtotal) { this.id = id; this.name = name; this.price = price; this.quantity = quantity; this.subtotal = subtotal; } private String id; private String name; private int price; private int quantity; private int subtotal; /** * @return id */ public String getId() { return id; } /** * @param id セットする id */ public void setId(String id) { this.id = id; } /** * @return name */ public String getName() { return name; } /** * @param name セットする name */ public void setName(String name) { this.name = name; } /** * @return price */ public int getPrice() { return price; } /** * @param price セットする price */ public void setPrice(int price) { this.price = price; } /** * @return quantity */ public int getQuantity() { return quantity; } /** * @param quantity セットする quantity */ public void setQuantity(int quantity) { this.quantity = quantity; } /** * @return subtotal */ public int getSubtotal() { return subtotal; } /** * @param subtotal セットする subtotal */ public void setSubtotal(int subtotal) { this.subtotal = subtotal; } /* (非 Javadoc) * @see java.lang.Object#hashCode() */ @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } /* (非 Javadoc) * @see java.lang.Object#equals(java.lang.Object) */ @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (!(obj instanceof Item)) { return false; } Item other = (Item) obj; if (name == null) { if (other.name != null) { return false; } } else if (!name.equals(other.name)) { return false; } return true; } }

###問題
init.jspで[明細追加]ボタンを押したときは正しくアイテム名で検索し、データを取得できるのですが、add.jspだと500エラーが発生してしまいます。

eclipseのデバッガを使い、選択したアイテム名が格納されるFormクラスのgoodsNameに何が入っているか調べてみたところ、init.jspの場合は以下の画像のようにアイテム名が正しく入っていましたが、イメージ説明
add.jspで[明細追加]を推した場合は、以下のようにカンマが入ってしまい、検索の邪魔をしてしまっていました。イメージ説明

おそらくinit.jspでボタンを押したときに渡されたアイテム名がgoodsNameの中に残ってしまっていることが原因と考えられるため、前のgoodsNameを削除すればカンマは消えると思うのですが、どうすれば前のgoodsNameを削除できるか分かりません。

どなたか知恵を貸していただけないでしょうか。
よろしくお願い致します。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

jimbe

2022/01/22 17:14

ご質問と直接関係しないかもしれませんが、 RecordManager.findItem はご期待のようには動作しないのではないでしょうか。 単体テストをした方が良いかと思います。

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Spring MVC

Spring MVCとは、Javaを用いてWebアプリケーションを開発できるフレームワーク。アーキテクチャにMVCを採用しており、画面遷移と入出力パラメータの受け渡しの基本的な機能の他、ユーザーの送信したパラメータに対する入力チェックなどさまざまな機能を持ちます。

Java

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