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

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

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

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

Spring

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

ArrayList

Java用のタグです。arrayListはListインターフェースを実装した、リサイズ可能な配列用クラスです。

Q&A

1回答

935閲覧

Eclipse 画面推移でのエラー

pepsiman

総合スコア0

Java

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

Spring

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

ArrayList

Java用のタグです。arrayListはListインターフェースを実装した、リサイズ可能な配列用クラスです。

0グッド

0クリップ

投稿2022/01/25 13:28

オンラインショップをJAVAを使用しプログラムしています。
teratail内で同様のプログラムを作成している方がおり、参考にしながら作成を行ったのですが、画面推移時にエラーが発生し想定の動作にたどり着かないためご質問です。

デバッグを使用しlistの情報とgoodsNameが不一致のためエラーとなっているのは理解できるのですが、goodsNameは想定の値「油性ボールペン」だったので原因がつかめずにいます。
根本原因は何でしょうか。

RecordManager.java

1@Repository 2@Scope(value = WebApplicationContext.SCOPE_SESSION, proxyMode = ScopedProxyMode.TARGET_CLASS) 3public final class RecordManager { 4 5/** 明細データ */ 6static List<Item> allList = new ArrayList<>(); 7 8/** 商品データ */ 9private static final List<Item> list = new ArrayList<Item>(); 10static { 11list.add(new Item("A00101", "油性ボールペン", 60, 0, 0)) 12/** 13* 更新した商品データ 14* 確認ボタンを押すとlistに書き込む。 15*/ 16private static Item newItem; 17 18/** 19* 引数で指定された商品名に一致する商品データを返却 20* @param name 検索キーとなる商品名 21* @return 検索結果の商品データ 22*/ 23 24public static Item findItem(String goodsName) { 25int index = list.indexOf(new Item("", goodsName, 0,0,0)); 26return list.get(index); 27} 28 29/** 30* 商品データを返す。 31* @return 商品データ 32*/ 33public static List<Item> getNameist() { 34return list; 35} 36 37/** 38* 明細データを返す。 39* @return 明細データ 40*/ 41public static List<Item> getallList() { 42return allList; 43} 44 45/** 46* リストに商品情報を 1 件追加する 47*/ 48public static void addToAllList(Item newItem) { 49Item item = new Item(newItem.getId(), newItem.getName(), newItem.getPrice(),newItem.getQuantity(),newItem.getSubtotal()); 50allList.add(item); 51} 52 53/** 54* リストに商品情報を 1 件削除する 55*/ 56public static void removeToAllList(int number) { 57//Item item = new Item(newItem.getId(), newItem.getName(), newItem.getPrice(),newItem.getQuantity(),newItem.getSubtotal()); 58int i = 0; 59for (Item item : allList) { 60i += 1; 61if (i == number + 1) { 62allList.remove(item); 63return; 64} 65} 66} 67 68/** 69* リストに商品情報を クリアする 70*/ 71public static void clearToAllList(Item newItem) { 72allList.clear(); 73} 74 75 76/** 77* newItemを商品データlistに書き込む。 78*/ 79public static void updateItem() { 80list.set(list.indexOf(newItem), newItem); 81} 82 83/** 84* newItemにデータを書き込む 85* @param ni セットする item 86*/ 87public static void setNewItem(Item ni) { 88newItem = ni; 89} 90 91public static Item getNewItem() { 92return newItem; 93} 94 95/** 96* 全員の名前のリストを返す。 97* @return 名前の配列 98*/ 99public static String[] makeNameList() { 100String[] nameList = new String[list.size()]; 101for (int i = 0; i < list.size(); i++) { 102nameList[i] = (list.get(i)).getName(); 103} 104return nameList; 105} 106 107/** 108* 名前で検索し、その商品のデータを返す。 109* @param name 商品名 110* @return 一商品データ 111*/ 112public static Item selectItem(String name) { 113 114for(Item item:list) { 115if (item.getName().equals(name)) { 116return item; 117} 118} 119return null; 120} 121 122public static int calTotal(List<Item> list) { 123int total = 0; 124for(Item item: list) { 125total += item.getSubtotal(); 126} 127return total; 128} 129}

SalesSystemController.java

1@Controller 2@RequestMapping(value = "/system") 3@SessionAttributes(types = {SalesForm.class}) 4public class SalesSystemController extends HttpServlet { 5 6 private static final String ERRMSG = "点数には1以上100以下の整数を入力してください。"; 7 private static final String ADDMSG = "明細に追加しました。"; 8// private static final String FIXMSG = "以下のように売上登録しました。"; 9 private static final String DELETE = "選択された明細行を削除しました。"; 10 private static final String ERRMSG2 = "明細行を選択して下さい。"; 11 12 /** 13 * 起動時および登録完了時に呼ばれる。初期画面を表示する。 14 * @param form フォームオブジェクト 15 * @param model モデルオブジェクト 16 * @return Viewとしてinit.jspを指定 17 */ 18 @RequestMapping(value = "/start") 19 public String init(SalesForm form, Model model) { 20 21 model.addAttribute("nameList", RecordManager.makeNameList()); 22 //model.addAttribute("nameList", RecordManager.makeNameList()); 23 //form.setGoodsName(RecordManager.getFirstPersonName()); 24 return "init"; 25 } 26 27 /** 28 * 初期画面から呼ばれる。選択した商品の明細追加画面を表示する。 29 * @param form フォームオブジェクト 30 * @param model モデルオブジェクト 31 * @return Viewとしてadd.jspを指定 32 */ 33 @RequestMapping(params = "add") 34 public String add(SalesForm form,BindingResult result, Model model) { 35 Item item = RecordManager.findItem(form.getGoodsName()); 36 RecordManager.setNewItem(new Item(item.getId(), form.getGoodsName(), item.getPrice(), form.getQuantity(), item.getSubtotal())); 37 Item newItem = RecordManager.getNewItem(); 38 int sb = newItem.getPrice() * newItem.getQuantity(); 39 newItem.setSubtotal(sb); 40 model.addAttribute("nameList", RecordManager.makeNameList()); 41 model.addAttribute("allList", RecordManager.getallList()); 42 if (result.hasErrors() || 1 > form.getQuantity() || form.getQuantity() > 100) { 43 model.addAttribute("total", RecordManager.calTotal(RecordManager.getallList())); 44 model.addAttribute("message", ERRMSG); 45 return "add"; 46 } else { 47 RecordManager.addToAllList(newItem); 48 model.addAttribute("total", RecordManager.calTotal(RecordManager.getallList())); 49 model.addAttribute("message2", ADDMSG); 50 return "add"; 51 } 52 } 53 54 /** 55 * 細追加画面から呼ばれる。選択した商品を削除し明細追加画面を表示する。 56 * @param form フォームオブジェクト 57 * @param model モデルオブジェクト 58 * @return Viewとしてadd.jspを指定 59 */ 60 @RequestMapping(params = "remove") 61 public String remove(BindingResult result,HttpServletRequest request,SalesForm form, Model model) { 62 String num = null; 63 num = request.getParameter("radio"); 64 int number = Integer.parseInt(num); 65 RecordManager.removeToAllList(number); 66 67 model.addAttribute("total", RecordManager.calTotal(RecordManager.getallList())); 68 model.addAttribute("nameList", RecordManager.makeNameList()); 69 model.addAttribute("allList", RecordManager.getallList()); 70 if (result.hasErrors()) { 71 model.addAttribute("message5", ERRMSG2); 72 return "add"; 73 }else { 74 model.addAttribute("message4", DELETE); 75 model.addAttribute("total", RecordManager.calTotal(RecordManager.getallList())); 76 return "add"; 77 } 78 } 79}

init.jsp

1<!DOCTYPE html> 2<html> 3<head> 4<link rel="stylesheet" type="text/css" 5 href="/sales/resources/css/common.css" /> 6<title>売上システム(初期画面)</title> 7</head> 8<body> 9 <form:form modelAttribute="salesForm" action="/sales/system" var="list"> 10 <div class="header"> 11 <span class="titleName">オンラインショップ</span> 12 <% 13 DateTimeFormatter format = DateTimeFormatter.ofPattern("MM月dd日(E)"); 14 %> 15 <span class="date"><%=format.format(LocalDate.now())%></span> 16 </div> 17 <div class="main"></div> 18 <div>初期画面</div> 19 商品: 20 <form:select path="goodsName" items="${nameList}" /> 21 <div> 22 点数: 23 <form:input path="quantity" items="${allList}" /> 24 </div> 25 <input type="submit" name="add" value="明細追加" /> 26 </form:form> 27</body> 28</html>

Item.java

1package jp.practice.sales; 2 3public class Item { 4 5 /** 商品ID */ 6 private String id; 7 /** 商品名 */ 8 private String name; 9 /** 単価 */ 10 private int price; 11 /** 売上点数 */ 12 private int quantity; 13 /** 小景 */ 14 private int subtotal; 15 16 public Item(String id, String name, int price, int quantity, int subtotal) { 17 this.id = id; 18 this.name = name; 19 this.price = price; 20 this.quantity = quantity; 21 this.subtotal = subtotal; 22 } 23 24 public String getId() { 25 return id; 26 } 27 28 public void setId(String id) { 29 this.id = id; 30 } 31 32 public String getName() { 33 return name; 34 } 35 36 public void setName(String name) { 37 this.name = name; 38 } 39 40 public int getPrice() { 41 return price; 42 } 43 44 public void setPrice(int price) { 45 this.price = price; 46 } 47 48 public int getQuantity() { 49 return quantity; 50 } 51 52 public void setQuantity(int quantity) { 53 this.quantity = quantity; 54 } 55 56 public int getSubtotal() { 57 return subtotal; 58 } 59 60 /** 61 * @param subtotal セットする subtotal 62 */ 63 public void setSubtotal(int subtotal) { 64 this.subtotal = subtotal; 65 } 66}

add.jsp

1<!DOCTYPE html> 2<html> 3<head> 4<link rel="stylesheet" type="text/css" 5 href="/sales/resources/css/common.css" /> 6<title>明細追加画面</title> 7</head> 8<body> 9 <form:form modelAttribute="salesForm" action="/sales/system" var="list"> 10 <div class="header"> 11 <span class="titleName">オンラインショップ</span> 12 <% 13 DateTimeFormatter format = DateTimeFormatter.ofPattern("MM月dd日(E)"); 14 %> 15 <span class="date"><%=format.format(LocalDate.now())%></span> 16 </div> 17 <div class="main"></div> 18 <div>明細追加画面</div> 19 商品: 20 <form:select path="goodsName" items="${nameList}" /> 21 <div> 22 点数: 23 <form:input path="quantity" items="${allList}" /> 24 </div> 25 <div> 26 <input type="submit" name="add" value="明細追加" /> 27 </div> 28 <div class="message"> 29 <font color="#ff0000"> <c:out value="${message}" /></font> <font 30 color="#1e90ff"> <c:out value="${message2}" /> 31 </font> <font color="#1e90ff"> <c:out value="${message4}" /> 32 </font><font color="#1e90ff"> <c:out value="${message5}" /> 33 </font> 34 </div> 35 36 <table border="1"> 37 <tr> 38 <th>削除</th> 39 <th>商品ID</th> 40 <th>商品名</th> 41 <th>単価</th> 42 <th>点数</th> 43 <th>小計</th> 44 </tr> 45 <c:forEach items="${allList}" var="item" varStatus="status"> 46 <tr class="even"> 47 <form:hidden path="quantity" /> 48 <td><input type="radio" name="radio" value="${status.index}" /></td> 49 <td><c:out value="${item.id}" /></td> 50 <td><c:out value="${item.name}" /></td> 51 <td><c:out value="${item.price}" /></td> 52 <td><c:out value="${item.quantity}" /></td> 53 <td><c:out value="${item.subtotal}" /></td> 54 </tr> 55 </c:forEach> 56 </table> 57 <div> 58 合計: 59 <c:out value="${total}" /> 6061 </div> 62 <input type="submit" name="firm" value="確定" /> 63 <input type="submit" name="remove" value="削除" /> 64 </form:form> 65</body> 66</html>

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

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

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

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

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

jimbe

2022/01/25 18:17 編集

>画面推移時にエラーが発生し 具体的にコードのどの部分でどのようなエラーとなったのでしょうか。
m.ts10806

2022/01/25 21:25

画面「遷移」(せんい)では?
guest

回答1

0

オンラインショップ案件が多いのは、同じ課題のご学友が複数ご質問されているのでしょうか。

teratail内で同様のプログラムを作成している方がおり

teratail は一問一答の QA サイトであって、作成を支援する場では無いと思いますが。

デバッグを使用しlistの情報とgoodsNameが不一致のためエラーとなっているのは理解できるのですが、goodsNameは想定の値「油性ボールペン」だったので原因がつかめずにいます。
根本原因は何でしょうか。

デバッガを使用しておられるのでしたら「不一致のため」というレベルでは無く「コードのどの個所でどの変数がどんな値であり、比較対象のどんな変数がどんな値なので…」という具体的な情報が得られるはずです。

findItem は間違っていますので、 selectItem を使うべきかと思います。

投稿2022/01/25 18:02

編集2022/01/25 18:38
jimbe

総合スコア12648

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問