前提・実現したいこと
飲み物を検索し、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/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
説明不足が多いですがよろしくお願いします。
回答1件
あなたの回答
tips
プレビュー