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

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

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

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

MVC

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

Java

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

Q&A

解決済

1回答

1399閲覧

java.lang.NullPointerExceptionの解決について

naotaro0704

総合スコア19

JSP

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

MVC

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

Java

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

0グッド

0クリップ

投稿2019/09/03 06:28

編集2019/09/03 07:03

前提・実現したいこと

java.lang.NullPointerExceptionといったエラーメッセージが出ます。どこかは見当がついているのですが対処法がわかりません。よろしくお願いします。
RecordManager.java.42が下のコードで、
if (id.equals(list.get(i).getId())) {

SalesSystemController.java:86が下のコードです。
model.addAttribute("allList", RecordManager.selectItem(form.getId(),form.getQuantity()));

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

java.lang.NullPointerException jp.practice.sales.RecordManager.selectItem(RecordManager.java:42) jp.practice.sales.SalesSystemController.firm(SalesSystemController.java:86) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:498) org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133) org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:116) org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827) org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738) org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872) javax.servlet.http.HttpServlet.service(HttpServlet.java:648) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

該当のソースコード

SalesSystemController.java

java

1package jp.practice.sales; 2 3import javax.validation.Valid; 4 5import org.slf4j.Logger; 6import org.slf4j.LoggerFactory; 7import org.springframework.stereotype.Controller; 8import org.springframework.ui.Model; 9import org.springframework.validation.BindingResult; 10import org.springframework.web.bind.annotation.ModelAttribute; 11import org.springframework.web.bind.annotation.RequestMapping; 12import org.springframework.web.bind.annotation.RequestMethod; 13 14/** 15 * Handles requests for the application home page. 16 */ 17@Controller 18@RequestMapping(value = "/system") 19public class SalesSystemController { 20 21 private static final Logger logger = LoggerFactory.getLogger(SalesSystemController.class); 22 23 /** Stringの定数として次の6つを定義する*/ 24 private static final String INIT = "init"; 25 private static final String ADD = "add"; 26 private static final String FIX = "fix"; 27 28 private static final String ERRMSG = "1以上の数字を入力してください。"; 29 private static final String ADDMSG = "明細に追加しました。"; 30 private static final String FIXMSG = "以下のように売上登録しました。"; 31 private static final String DELETE = "選択された明細行を削除しました。"; 32 33 34 @RequestMapping(value = "/start") 35 36 public String init(SalesForm form, Model model) { 37 /** RecordManagerにItemListを格納する*/ 38 model.addAttribute("ItemList", RecordManager.getItemList()); 39 /** RecordManagerにNameListを作成する*/ 40 model.addAttribute("nameList", RecordManager.makeNameList()); 41 return INIT; 42 } 43 44 @RequestMapping(params = "add", method = RequestMethod.POST) 45 public String add(@Valid @ModelAttribute("salesForm") SalesForm form, BindingResult result, Model model) { 46 47 logger.info("Post : " + form.getQuantity()); 48 49 50 51// /** RecordManagerのselectItemにidとquantityを格納*/ 52// model.addAttribute("allList", RecordManager.selectItem(form.getId(),form.getQuantity())); 53// /** RecordManagerにNameListを作成する*/ 54// model.addAttribute("nameList", RecordManager.makeNameList()); 55 56 /** 1の数字以外または未入力のときエラーとして処理*/ 57 if (result.hasErrors()) { 58 /** RecordManagerにNameListを作成する*/ 59 model.addAttribute("nameList", RecordManager.makeNameList()); 60 /** エラーメッセージの表示*/ 61 model.addAttribute("message", ERRMSG); 62 /** 初期画面へ*/ 63 return INIT; 64 } 65 /** 1以上のとき正常処理*/ 66 else { 67 /** RecordManagerのselectItemにidとquantityを格納*/ 68 model.addAttribute("allList", RecordManager.selectItem(form.getId(),form.getQuantity())); 69 /** RecordManagerにNameListを作成する*/ 70 model.addAttribute("nameList", RecordManager.makeNameList()); 71 /** QuantityにaddDataを格納*/ 72 model.addAttribute("addData", form.getQuantity()); 73 /**明細追加完了のメッセージを表示*/ 74 model.addAttribute("message", ADDMSG); 75 /** 売上に合計金額を表示*/ 76// model.addAttribute("total",RecordManeger. total); 77 /** 明細追加画面へ*/ 78 return ADD; 79 } 80 81 } 82 83 @RequestMapping(params = "firm") 84 public String firm( SalesForm form, Model model) { 85 /** RecordManagerのselectItemにnameを格納*/ 86 model.addAttribute("allList", RecordManager.selectItem(form.getId(),form.getQuantity())); 87 /** 売上登録完了のメッセージを表示*/ 88 model.addAttribute("message", FIXMSG); 89 /** 売上に合計金額を表示*/ 90// model.addAttribute("total",RecordManeger. total); 91 /** 売上登録画面へ*/ 92 return FIX; 93 } 94 95 @RequestMapping(params = "end") 96 public String end( SalesForm form, Model model) { 97 /** RecordManagerにItemListを格納す**/ 98 model.addAttribute("ItemList", RecordManager.getItemList()); 99 /** RecordManagerにNameListを作成する*/ 100 model.addAttribute("nameList", RecordManager.makeNameList()); 101 /**初期画面へ*/ 102 return INIT; 103 } 104 105 @RequestMapping(params = "remove") 106 public String remove(SalesForm form, Model model) { 107 /** RecordManagerのselectItemにidとquantityを格納*/ 108 model.addAttribute("allList", RecordManager.selectItem(form.getId(),form.getQuantity())); 109 /** RecordManagerにNameListを作成する*/ 110 model.addAttribute("nameList", RecordManager.makeNameList()); 111 /** QuantityにaddDataを格納*/ 112 model.addAttribute("addData", form.getQuantity()); 113 model.addAttribute("message", DELETE); 114// if { 115 /** 明細追加画面へ*/ 116 return ADD; 117// }else { 118 /** 初期画面へ*/ 119// return INIT; 120// } 121 } 122 123} 124

RecordManager.java

java

1package jp.practice.sales; 2 3import java.util.ArrayList; 4import java.util.List; 5 6//商品一覧 7/** 8 * 商品データ全体を保持するクラス 9 */ 10public final class RecordManager { 11 12 /** 商品データ */ 13 private static List<Item> list = new ArrayList<>(); 14 private static List<Item> selectList = new ArrayList<>(); 15 private static Item item; 16 /** sumを定義*/ 17 private static int total = 0; 18 19 static { 20 list.add(new Item("A00101", "油性ボールペン", 60, 0, 0)); 21 list.add(new Item("A00201", "極細ボールペン", 120, 0, 0)); 22 list.add(new Item("A00301", "蛍光ペン6色セット", 420, 0, 0)); 23 list.add(new Item("A00401", "シャープペンシル", 100, 0, 0)); 24 list.add(new Item("A00501", "鉛筆H(1ダース)", 400, 0, 0)); 25 list.add(new Item("B00101", "無線綴ノートA4", 100, 0, 0)); 26 list.add(new Item("B00201", "リングノートA4", 120, 0, 0)); 27 list.add(new Item("B00301", "領収書", 350, 0, 0)); 28 list.add(new Item("C00101", "はさみ(青)", 128, 0, 0)); 29 list.add(new Item("C00201", "ステープラー", 338, 0, 0)); 30 list.add(new Item("C00301", "2穴パンチ", 128, 0, 0)); 31 list.add(new Item("C00401", "ゼムクリップ", 98, 0, 0)); 32 list.add(new Item("C00501", "消しゴム", 58, 0, 0)); 33 } 34 35 36 /** 商品名 */ 37 public static List<Item> selectItem(String id, int quantity) { 38 39 for (int i = 0; i < list.size(); i++) { 40 41 42 if (id.equals(list.get(i).getId())) { 43 System.out.println(i); 44 /** Itemを再定義 */ 45 Item item = new Item(id, list.get(i).getName(), list.get(i).getPrice(), quantity,quantity * list.get(i).getPrice()); 46 47 selectList.add(item); 48 49 /** xを定義*/ 50 int x = quantity * list.get(i).getPrice(); 51 total = total + x; 52 53 54 break; 55 } 56 57 58 } 59 60 61 62 return selectList; 63 64 } 65 66 /** nameListの作成 */ 67 public static String[] makeNameList() { 68 String[] nameList = new String[list.size()]; 69 for (int i = 0; i < list.size(); i++) { 70 nameList[i] = (list.get(i)).getName(); 71 } 72 return nameList; 73 } 74 75 /** itemList取得 */ 76 public static List<Item> getItemList() { 77 return list; 78 } 79 80 /** itemLista設定 */ 81 public static void setItemList() { 82 /** 設定した[item」をlist内で検索する。 */ 83 list.set(list.indexOf(item), item); 84 } 85 86 public static void main(String[] args) { 87 long value = System.currentTimeMillis(); 88 System.out.println(value); 89 } 90 91} 92 93

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

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

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

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

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

m.ts10806

2019/09/03 06:39

ざっとコードを読んだ感じ「どこかは見当がついているのですが」が分かりませんでした。 どこでしょうか? 提示コード内に行数が示されているわけではないので、明示いただければと
BluOxy

2019/09/03 06:46

RecordManager.javaの42行目はid.equals(list.get(i).getId())の部分ですよね。 引数idの実際の値であるformかform.getId()が空だから例外が発生するのではないでしょうか。 そうではなければその旨を質問に追記すると良いと思います。 (SpringBootがわからないため申し訳ないですが回答はしません)
naotaro0704

2019/09/03 07:04

ご指摘ありがとうございます。前提のところに追加しました。
BluOxy

2019/09/03 07:08

init,add,firm,end,removeformの引数であるformがnullかどうか確認しましたか? また、form.getId()かnullかどうか確認しましたか? そこに問題がないかの旨を質問に追記すると良いと思います。
naotaro0704

2019/09/04 06:37

確認する方法はどのようなものでしょうか。
BluOxy

2019/09/04 06:39

デバッグですね。Eclipseで開発されているのであればhttps://qiita.com/daikete/items/fb70e6e5808b433b9d85を参照してください。
guest

回答1

0

ベストアンサー

まず、どれがnullなのかを特定しましょう
それがわかればおのずと対処法もわかるもんです。

投稿2019/09/03 06:48

y_waiwai

総合スコア87719

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問