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

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

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

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

Java

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

Q&A

解決済

1回答

20073閲覧

戻り値がarraylistの時の受け取りがわからない。

退会済みユーザー

退会済みユーザー

総合スコア0

JSP

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

Java

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

0グッド

0クリップ

投稿2018/02/14 06:10

編集2018/02/14 06:44

前提・実現したいこと

飲み物を検索し、select文でDBに引っかかった飲み物の種類だけ表示させる。

①list.jspから飲料水番号と飲料水名を取得し、ListController.javaで受け取る。
②受け取った2つの値を引数として別クラスT001ItemDao.javaのserchItemメソッドを呼び出し
③arraylistを宣言。
④select文を実行。
⑤別クラスItemBean.javaでゲッターセッターを宣言。
⑥select文実行結果をItemBeanのセッターに代入。
⑦セッターに代入したオブジェクトをlist.addでリストに個数分追加
⑧リストをListController.javaに返しsetAttribute()でjspに渡し、jspでリストの個数分だけループして表示。

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

発生している問題として、T001ItemDao.javaのserchItemメソッドの戻り値として、ItemBean型のarraylistがListcontrollerクラスで正しく受け取れていない?

該当のソースコード

jsp

1list.jsp(値取得部分省略) 2 3<table cellspacing="1" cellpadding="8" border="0" bgcolor="#999999"> 4 <tr bgcolor="#EBEBEB"> 5 <th> </th> 6 <th> </th> 7 <th> </th> 8 <th align="center">商品コード</th> 9 <th align="center">商品名</th> 10 <th align="center">金額</th> 11 <th align="center">数量</th> 12 </tr> 13<% List<ItemBean> list = (List<ItemBean>)request.getAttribute("Item"); %> 14<% 15 if(list != null){ 16 for(int i = 0; i < list.size(); i++){ 17 //取得したlistから1件ずつ商品データ(ItemBean)を取り出す 18 ItemBean selectedItm = list.get(i); 19%> 20 21 <tr bgcolor="#FFFFFF"> 22 <td><a href="./view.html?{{ person.key }}">詳細</a></td> 23 <td><a href="./edit.html?/{{ item.key }}">編集</a></td> 24 <td><a href="./delete.html?{{ item.key }}">削除</a></td> 25 26 <!-- 各セル(tdタグ)に検索結果(商品コード等)入れます --> 27 <td align="center"><%=selectedItm.getCode()%></td> 28 <td align="center"><%=selectedItm.getName()%></td> 29 <td align="center"><%=selectedItm.getPrice()%></td> 30 <td align="center"><%=selectedItm.getCount()%></td> 31 </tr> 32<% }}%> 33</table> 34 35コード

java

1ListController.java(Postメソッド部分のみ) 2 3 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 4 //文字コードをUTF-8にセット 5 request.setCharacterEncoding("UTF-8"); 6 response.setContentType("text/html:charset=UTF-8"); 7 response.setCharacterEncoding("UTF-8"); 8 9 String code = request.getParameter("code"); 10 String name = request.getParameter("name"); 11 System.out.println(code + "" + name); 12 13 T001ItemDao itemDao = null; 14 try{ 15 ItemBean item = new ItemBean(); 16 List<ItemBean> list = new ArrayList<ItemBean>();//リストで受け取るために用意 17 itemDao = new T001ItemDao(); 18 19 list = itemDao.serchItem(code, name);//jspにリストを送る 20 21 request.getSession().setAttribute("Item", list); 22 23 ServletContext application = getServletContext(); 24 application.getRequestDispatcher("/list.jsp").forward(request,response); 25 26 } catch(ClassNotFoundException e){ 27 e.printStackTrace(); 28 } catch(SQLException e){ 29 e.printStackTrace(); 30 } finally{ 31 //データベース切断 32 itemDao.close(); 33 } 34 } 35 36コード

java

1T001ItemDao.java(serchItemメソッドのみ) 2 3//の商品検索 4 public List<ItemBean> serchItem(String code, String name){ 5 //リスト作成 6 List<ItemBean> list = new ArrayList<ItemBean>(); 7 try{ 8 //sql発行 9 String sql2 = "select ITEM_NO, ITEM_NM, UNIT_PRICE, STOCK_COUNT from T001_ITEM " 10 + "where ITEM_NO like '" +code+ "%'" 11 + "and ITEM_NM like '%" +name+ "%'"; 12 13 pstmt = conn.prepareStatement(sql2); 14 //実行 15 ResultSet resultSet = pstmt.executeQuery(sql2); 16 17 while(resultSet.next()){ 18 //1件分のデータを格納するItemBeanを宣言する 19 ItemBean selectedItem = new ItemBean(); 20 21 selectedItem.setCode(resultSet.getString("ITEM_NO")); 22 selectedItem.setName(resultSet.getString("ITEM_NM")); 23 selectedItem.setPrice(resultSet.getString("UNIT_PRICE")); 24 selectedItem.setCount(resultSet.getString("STOCK_COUNT")); 25 26 //宣言したリストに1件ずつwhile分追加する 27 list.add(selectedItem); 28 } 29 System.out.println("商品検索結果"+list.size()+"件ヒットしました"); 30 }catch (SQLException e){ 31 e.printStackTrace(); 32 } 33 return list; 34 } 35コード

試したこと

T001ItemDao.javaでselectで返ってきた値をセッターに代入できている。

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

ここにより詳細な情報を記載してください。

説明不足が多いですがよろしくお願いします。

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

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

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

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

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

unz.hori

2018/02/14 06:17

ソース(java/JSP)がインデントなしになっていて見にくいのでコードを使ってください
退会済みユーザー

退会済みユーザー

2018/02/14 06:33

すいません。コードの使い方がわからなくて反映されません
unz.hori

2018/02/14 06:34

編集時のアイコンで</>を押すと```ここに言語を入力 コード ```と出てきますので```の間にコードを貼ってください。
unz.hori

2018/02/14 06:36

例えば```Java(改行)int i = 1;```てな感じで。(改行)は実際の改行コードです。
退会済みユーザー

退会済みユーザー

2018/02/14 06:40

プレビューでコードは反映されているようなのですが、更新を押しても反映がなかなかされません・・・
unz.hori

2018/02/14 06:42

なんかエラーが出てないですか?更新理由を入れろみたいな
退会済みユーザー

退会済みユーザー

2018/02/14 06:44

できたようです。ありがとうございます。
unz.hori

2018/02/14 06:48

見易くなりましたね。回答者側の事も考えましょう。
guest

回答1

0

ベストアンサー

細かいですが、ListControllerクラスで
List<ItemBean> list = new ArrayList<ItemBean>();
としていますが、戻り値としてlistを受け取るのでnewする必要はないです。
List<ItemBean> list = itemDao.serchItem(code, name);
でいいです。ぱっと見た目は特に問題なさそうですがjspでListとかはimportされてますか?

投稿2018/02/14 06:56

unz.hori

総合スコア1057

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

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

退会済みユーザー

退会済みユーザー

2018/02/14 07:05

java.util.*と記述しておりますのでおそらく大丈夫かと思います。念のためにjava.util.ArrayListと追加で記述させてもらいました。newを消してList<ItemBean> list = itemDao.serchItem(code, name);と記述しましたがあっていますか?補足として、修正した後実行しましたが商品はまだ表示されておらず、直接の問題の解決にはなっていないようです。
unz.hori

2018/02/14 07:07

そもそもDBからデータはちゃんと取得できていますか?内容を確認しましたか?
unz.hori

2018/02/14 07:09

ソース修正は合っています。
退会済みユーザー

退会済みユーザー

2018/02/14 07:16

select文の結果は適当な値が入っていることを確認しました。そして、System.out.println(selectedItem.getCode());という感じでセッターで値が代入されているかを確認し、selectで必要なデータを取り出し、適当な値をセッターにセットするというところまではできているかと思います。
退会済みユーザー

退会済みユーザー

2018/02/14 07:34

修正します。今確認をしたのですが、T001ItemDao.javaのselectでの結果はちゃんと適当な値が返ってきているようです。が、セッターにセットしlist.addをしたあとにlist.size()をsysoutで表示すると0になりました。以前はちゃんと適当な値が入っていたのですが、どういうことなのか自分でもわかりません・・・
unz.hori

2018/02/14 07:40

T001ItemDao.java#serchItemは変更していませんか?またはデータに変更がありませんでしたか?
退会済みユーザー

退会済みユーザー

2018/02/14 07:44

T001ItemDao.javaにゴミが入っていたようです。list.size()の結果が正しい結果になりました。お騒がせしました。
unz.hori

2018/02/14 07:47

気になる点といえば、セッションに設定している時は request.getSession().setAttribute("Item", list); 取得している方は request.getAttribute("Item"); これを request.getSession().getAttribute("Item"); としたらどうでしょう?
退会済みユーザー

退会済みユーザー

2018/02/14 07:48

関係ないかもしれませんが、list.jspの最後当たりのarraylist宣言のところに気になるところがありました。<% List<ItemBean> list = (List<ItemBean>)request.getAttribute("Item"); %>と宣言してあるのですが、型の安全性: Object から List<ItemBean> への未検査キャストと警告?黄色のビックリマークがついています。何か関係があるとよいのですが、、、
unz.hori

2018/02/14 07:48

それは警告レベルなので問題ないです
退会済みユーザー

退会済みユーザー

2018/02/14 07:52

request.getSession().getAttribute("Item");にしたところ、正しく表示されました!!! Attribute()にSessionをつけると受け取る側もSessionをつけないとプログラムの中で違うものとして区別されるということでしょうか?
unz.hori

2018/02/14 07:53

違うところを見に行っていたんでしょうね。requestオブジェクトのattributeを取得しようとして取得できなかったと想像できます。
退会済みユーザー

退会済みユーザー

2018/02/14 07:55

なるほど。。。 勉強になりました!!!ベストアンサー?にさせてもらいましたが正しく反映してますでしょうか?プログラミング初心者なのでこれからも質問等していくと思います。またお見えする機会があればどうぞよろしくお願いします。
unz.hori

2018/02/14 07:57

ベストアンサーいただきましたw。今回のようなケースでは大体がどこに設定した?どこから持ってきた?という観点をじっくり見てみれば結構解決するものです。これからも頑張ってください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問