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

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

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

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

Java

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

Spring

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

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Q&A

解決済

1回答

4915閲覧

jspの画面遷移時のデータの取得方法

icecleam

総合スコア46

JSP

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

Java

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

Spring

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

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

0グッド

0クリップ

投稿2020/08/24 12:22

編集2020/08/24 13:09

以下のinit.jsp(初期画面)から[明細追加]ボタンを押すとadd.jsp(明細追加画面)に遷移するようにしたいです。

その時、init.jspの以下のプルダウンで選択した内容をadd.jspの画面に表示させたいのですが[明細追加]ボタンを押すと、以下のエラー(エラー内容)が出てしまいます。

エラー内容で検索かけたりなどしたのですが、原因がわかりませんでした。。
どこを修正すればうまくadd.jspでプルダウンの選択内容を表示できるのか教えていただきたいです。
長くなってしまい申し訳ありませんが、よろしくお願いします。

init.jspのプルダウン部分

jsp

1<form:select path="goodsName" items="${nameList}" />

add.jspの表示させたい部分

jsp

1<c:out value="${SalesForm.goodsName}" />

エラー内容

Type Exception Report

メッセージ Request processing failed; nested exception is java.lang.ArrayIndexOutOfBoundsException

説明 The server encountered an unexpected condition that prevented it from fulfilling the request.

例外

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.ArrayIndexOutOfBoundsException
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
原因

java.lang.ArrayIndexOutOfBoundsException


init.jsp

jsp

1<%@ page session="false" language="java" 2 contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 3<%@ page import="java.time.LocalDate"%> 4<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 5<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%> 6<!DOCTYPE html> 7<html> 8<head> 9<link rel="stylesheet" type="text/css"href="/sales/resources/css/common.css" /> 10<title>売上システム(初期画面)</title> 11</head> 12<body> 13 <form:form modelAttribute="salesForm" action="/sales/system" var="list"> 14 <div class="header"> 15 <span class="titleName">オンラインショップ</span> 16 <div class="date"><%=LocalDate.now()%></div> 17 </div> 18 <div class="main"> 19 </div> 20 <div>初期画面</div> 21 <form:select path="goodsName" items="${nameList}" /> 22 <input type="submit" name="add" value="明細追加" /> 23 </form:form> 24</body> 25</html>

add.jsp

jsp

1<%@ page session="false" language="java" 2 contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 3<%@ page import="java.time.LocalDate"%> 4<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 5<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%> 6<!DOCTYPE html> 7<html> 8<head> 9<link rel="stylesheet" type="text/css" 10 href="/sales/resources/css/common.css" /> 11<title>売上システム(初期画面)</title> 12</head> 13<body> 14 <form:form modelAttribute="salesForm" action="/sales/system" var="list"> 15 <div class="header"> 16 <span class="titleName">オンラインショップ</span> 17 <div class="date"><%=LocalDate.now()%></div> 18 <div class="main"></div> 19 <form:hidden path="goodsName" /> 20 <div>明細追加画面</div> 21 <div> 22 <c:out value="${SalesForm.goodsName}" /> 23 <input type="submit" name="fix" value="確定" /> 24 </div> 25 </div> 26 </form:form> 27</body> 28</html>

SalesSystemController.java

java

1package jp.practice.sales; 2 3import org.springframework.stereotype.Controller; 4import org.springframework.ui.Model; 5import org.springframework.web.bind.annotation.RequestMapping; 6 7/** 8 * Handles requests for the application home page. 9 */ 10@Controller 11@RequestMapping(value = "/system") 12public class SalesSystemController { 13 14 /** 15 * 起動時および登録完了時に呼ばれる。初期画面を表示する。 16 * @param form フォームオブジェクト 17 * @param model モデルオブジェクト 18 * @return Viewとしてinit.jspを指定 19 */ 20 @RequestMapping(value = "/start") 21 public String init(SalesForm form, Model model) { 22 model.addAttribute("nameList", RecordManager.makeNameList()); 23 //model.addAttribute("nameList", RecordManager.makeNameList()); 24 //form.setGoodsName(RecordManager.getFirstPersonName()); 25 return "init"; 26 } 27 28 /** 29 * 初期画面から呼ばれる。選択した商品の明細追加画面を表示する。 30 * @param form フォームオブジェクト 31 * @param model モデルオブジェクト 32 * @return Viewとしてadd.jspを指定 33 */ 34 @RequestMapping(params = "add") 35 public String add(SalesForm form, Model model) { 36 Item item = RecordManager.selectItem(form.getGoodsName()); 37 form.setGoodsName(item.getName()); 38 return "add"; 39 } 40}

item.java

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 /** 25 * @return id 26 */ 27 public String getId() { 28 return id; 29 } 30 31 /** 32 * @param id セットする id 33 */ 34 public void setId(String id) { 35 this.id = id; 36 } 37 38 /** 39 * @return name 40 */ 41 public String getName() { 42 return name; 43 } 44 45 /** 46 * @param name セットする name 47 */ 48 public void setName(String name) { 49 this.name = name; 50 } 51 52 /** 53 * @return price 54 */ 55 public int getPrice() { 56 return price; 57 } 58 59 /** 60 * @param price セットする price 61 */ 62 public void setPrice(int price) { 63 this.price = price; 64 } 65 66 /** 67 * @return quantity 68 */ 69 public int getQuantity() { 70 return quantity; 71 } 72 73 /** 74 * @param quantity セットする quantity 75 */ 76 public void setQuantity(int quantity) { 77 this.quantity = quantity; 78 } 79 80 /** 81 * @return subtotal 82 */ 83 public int getSubtotal() { 84 return subtotal; 85 } 86 87 /** 88 * @param subtotal セットする subtotal 89 */ 90 public void setSubtotal(int subtotal) { 91 this.subtotal = subtotal; 92 } 93 /* (非 Javadoc) 94 * @see java.lang.Object#hashCode() 95 */ 96 @Override 97 public int hashCode() { 98 final int prime = 31; 99 int result = 1; 100 result = prime * result + ((name == null) ? 0 : name.hashCode()); 101 return result; 102 } 103 /* (非 Javadoc) 104 * @see java.lang.Object#equals(java.lang.Object) 105 */ 106 @Override 107 public boolean equals(Object obj) { 108 if (this == obj) { 109 return true; 110 } 111 if (obj == null) { 112 return false; 113 } 114 if (!(obj instanceof Item)) { 115 return false; 116 } 117 Item other = (Item) obj; 118 if (name == null) { 119 if (other.name != null) { 120 return false; 121 } 122 } else if (!name.equals(other.name)) { 123 return false; 124 } 125 return true; 126 } 127}

SalesForm.java

java

1package jp.practice.sales; 2 3public class SalesForm { 4 5 private String goodsName; 6 private int point; 7 private int delNumber; 8 9 public SalesForm() { 10 11 } 12 /** 13 * @return goodsName 14 */ 15 public String getGoodsName() { 16 return goodsName; 17 } 18 19 /** 20 * @param goodsName セットする goodsName 21 */ 22 public void setGoodsName(String goodsName) { 23 this.goodsName = goodsName; 24 } 25 26 /** 27 * @return point 28 */ 29 public int getPoint() { 30 return point; 31 } 32 33 /** 34 * @param point セットする point 35 */ 36 public void setPoint(int point) { 37 this.point = point; 38 } 39 40 /** 41 * @return delNumber 42 */ 43 public int getDelNumber() { 44 return delNumber; 45 } 46 47 /** 48 * @param delNumber セットする delNumber 49 */ 50 public void setDelNumber(int delNumber) { 51 this.delNumber = delNumber; 52 } 53 54}

RecordManager.java

java

1package jp.practice.sales; 2 3import java.util.ArrayList; 4import java.util.List; 5 6/** 7 * 商品データ全体を保持するクラス 8 */ 9public final class RecordManager { 10 11 /** 商品データ */ 12 private static final List<Item> list = new ArrayList<Item>(); 13 static { 14 list.add(new Item("A00101", "油性ボールペン", 60, 0, 0)); 15 list.add(new Item("A00201", "極細ボールペン", 120, 0, 0)); 16 list.add(new Item("A00301", "蛍光ペン6色セット", 420, 0, 0)); 17 list.add(new Item("A00401", "シャープペンシル", 100, 0, 0)); 18 list.add(new Item("A00501", "鉛筆H(1ダース)", 400, 0, 0)); 19 list.add(new Item("B00101", "無線綴ノートA4", 100, 0, 0)); 20 list.add(new Item("B00201", "リングノートA4", 120, 0, 0)); 21 list.add(new Item("B00301", "領収書", 350, 0, 0)); 22 list.add(new Item("C00101", "はさみ(青)", 128, 0, 0)); 23 list.add(new Item("C00201", "ステープラー", 338, 0, 0)); 24 list.add(new Item("C00301", "2穴パンチ", 128, 0, 0)); 25 list.add(new Item("C00401", "ゼムクリップ", 98, 0, 0)); 26 list.add(new Item("C00501", "消しゴム", 58, 0, 0)); 27 } 28 29 /** 30 * 引数で指定された商品名に一致する商品データを返却 31 * @param name 検索キーとなる商品名 32 * @return 検索結果の商品データ 33 */ 34 public static Item findItem(String goodsName) { 35 int index = list.indexOf(new Item("", goodsName, 0,0,0)); 36 return list.get(index); 37 } 38 39 /** 40 * 商品データを返す。 41 * @return 商品データ 42 */ 43 public static List<Item> getNameist() { 44 return list; 45 } 46 47 /** 48 * 全員の名前のリストを返す。 49 * @return 名前の配列 50 */ 51 public static String[] makeNameList() { 52 String[] nameList = new String[list.size()]; 53 for (int i = 0; i < list.size(); i++) { 54 nameList[i] = (list.get(i)).getName(); 55 } 56 return nameList; 57 } 58 59 /** 60 * 名前で検索しその人のスケジュールデータを返す。 61 * @param name 商品名 62 * @return 一商品データ 63 */ 64 public static Item selectItem(String name) { 65 Item item = new Item(name,"",0,0,0); 66 return list.get(list.indexOf(item)); 67 } 68}

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

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

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

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

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

guest

回答1

0

ベストアンサー

RecordManager クラスの selectItemメソッドの検索処理(?)が正しくありません。
引数(おそらくControllerが画面から受け取ったプルダウンの値)がいずれであってもエラーになります。

Itemクラスのname値と合致するItemを取得したいのであれば、

java

1return list.stream().filter(item -> item.getName().equals(name)).findFirst().get();

ないしは

java

1for(Item item:list) { 2 if (item.getName().equals(name)) { 3 return item; 4 } 5}

になるかと思いますが、見つからなかったときの制御は別途必要です。

投稿2020/08/24 15:23

A-pZ

総合スコア12011

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

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

icecleam

2020/08/25 10:07

ご回答頂きありがとうございます すみません、上記の内容ですが以下の修正であってますでしょうか。 以下の内容だと同じ内容のエラーが出てしまったので。。 申し訳ありませんが確認をお願いします。。 RecordManager クラス * 名前で検索しその人のスケジュールデータを返す。 * @param name 商品名 * @return 一商品データ */ public static Item selectItem(String name) { for(Item item:list) { if (item.getName().equals(name)) { return item; } } Item item = new Item(name,"",0,0,0); return list.get(list.indexOf(item)); }
icecleam

2020/08/25 12:57

今、いろいろ触っていたら画面繊維はうまくできました! でも相変わらず選んだ商品は表示されません。 とりあえずは一歩前進したので、また別途の質問としてあげさせて頂きます。 ありがとうございました! 以下は修正したRecordManager クラスです。 /** * 名前で検索しその人のスケジュールデータを返す。 * @param name 商品名 * @return 一商品データ */ public static Item selectItem(String name) { for(Item item:list) { if (item.getName().equals(name)) { return item; } } Item item = new Item(name,"",0,0,0); //return list.get(list.indexOf(item)); return item; }
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問