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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

JSP

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

Java

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

servlet

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

解決済

【DAO】のListをservletクラスで呼び出す方法について

mutani
mutani

総合スコア20

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

JSP

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

Java

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

servlet

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

2回答

0評価

0クリップ

14673閲覧

投稿2018/09/26 07:39

編集2018/09/26 09:20

前提・実現したいこと

selectで取得した値をリストに格納して、servletを介してJSPに出力する。

<詳細>
ソースコード内のslListをservletで取得したい。
servlet内のコードの書き方についてご教示いただけないでしょうか。

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

・正常に値を取得できない。

該当のソースコード

DAO

public List<t_productBean> select(t_productBean t_productBean) { Connection conn = null; List<t_productBean>slList = new ArrayList<t_productBean>(); try { //データベースへ接続 conn = DriverManager.getConnection(url,user,password); //select文の準備 String sql = "SELECT * FROM t_product WHERE product_id = ?"; PreparedStatement pstmt = conn.prepareStatement(sql); //SELECT文中の?に使用する値を設定しSQL完成 pstmt.setInt(1, t_productBean.getproduct_id()); //SElECT文を実行し、結果を取得 ResultSet rs = pstmt.executeQuery(); while(rs.next()) { //select文の結果をArrayListに格納 int product_id = rs.getInt("product_id"); String product_genre_code = rs.getString("product_genre_code"); String product_name = rs.getString("product_name"); String product_maker = rs.getString("product_maker"); int product_price = rs.getInt("product_price"); int product_stock = rs.getInt("product_stock"); int product_sales = rs.getInt("product_sales"); String product_remarks = rs.getString("product_remarks"); if(product_genre_code.equals("1")) { product_genre_code ="指定なし"; }else if(product_genre_code.equals("2")) { product_genre_code = "時計"; }else if(product_genre_code.equals("3")) { product_genre_code = "電子機器"; }else if(product_genre_code.equals("4")) { product_genre_code = "携帯"; }else{product_genre_code ="error";} t_productBean pb = new t_productBean(product_id,product_genre_code,product_name ,product_maker,product_price,product_stock,product_sales,product_remarks); pb.setproduct_id(product_id); pb.setproduct_genre_code(product_genre_code); pb.setproduct_name(product_name); pb.setproduct_maker(product_maker); pb.setproduct_price(product_price); pb.setproduct_stock(product_stock); pb.setproduct_sales(product_sales); pb.setproduct_remarks(product_remarks); System.out.println("sl"+product_id); System.out.println("sl"+product_genre_code); System.out.println("sl"+product_name); System.out.println("sl"+product_maker); System.out.println("sl"+product_price); System.out.println("sl"+product_stock); System.out.println("sl"+product_sales); System.out.println("sl"+product_remarks); t_productBean t_product = new t_productBean(product_id,product_genre_code,product_name ,product_maker,product_price,product_stock,product_sales,product_remarks); System.out.println( t_product.getproduct_id()); slList.add(t_product); } }catch(SQLException e) { //例外SQL例外あり e.printStackTrace(); return null; }finally { //catchがなくても必ず実行 //データベース切断 if(conn != null) { try { conn.close(); }catch(SQLException e) { e.printStackTrace(); return null; } } } return slList; } }

servlet

package servlet; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import model.Selectlogic; import model.Updatelogic; import model.t_productBean; @WebServlet("/ProductUpdate") public class ProductUpdate extends HttpServlet { private static final long serialVersionUID = 1L; public ProductUpdate() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("UTF-8"); String product_id_parameter = request.getParameter("product_id"); String product_name = ""; String product_genre_code = ""; String product_maker = ""; int product_price = 0; int product_stock= 0; int product_sales= 0; String product_remarks = ""; Integer product_id = Integer.parseInt(product_id_parameter); t_productBean T_product = new t_productBean(product_id,product_genre_code,product_name ,product_maker,product_price,product_stock,product_sales,product_remarks); Selectlogic.execute(T_product); List<t_productBean>productList = new ArrayList<t_productBean>(); productList.add(new t_productBean(product_id,product_genre_code,product_name,product_maker,product_price,product_stock,product_sales,product_remarks)); request.setAttribute("productList", productList); RequestDispatcher rd = request.getRequestDispatcher("/ProductUpdate.jsp" ); rd.forward(request,response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); //formの値を取得 String product_id_parameter = request.getParameter("product_id"); String product_genre_code = request.getParameter("product_genre_code"); String product_name = request.getParameter("product_name"); String product_maker = request.getParameter("product_maker"); String product_price_parameter = request.getParameter("product_price"); String product_stock_parameter = request.getParameter("product_stock"); String product_sales_parameter = request.getParameter("product_sales"); String product_remarks = request.getParameter("product_remarks"); switch (product_genre_code) { case "指定なし": product_genre_code ="1"; break; case "時計": product_genre_code ="2"; break; case "電子機器": product_genre_code ="3"; break; case "携帯": product_genre_code ="4"; break; } //String型をintに変換 Integer product_id = Integer.parseInt(product_id_parameter); Integer product_price = Integer.parseInt(product_price_parameter); Integer product_stock = Integer.parseInt(product_stock_parameter); Integer product_sales = Integer.parseInt(product_sales_parameter); //インスタンス化 t_productBean T_product = new t_productBean(product_id,product_genre_code,product_name ,product_maker,product_price,product_stock,product_sales,product_remarks); Updatelogic.execute(T_product); RequestDispatcher dispatcher = request.getRequestDispatcher("/ProductList" ); dispatcher.forward(request,response); } }

JSP

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html> <html> <head> <meta charset = "utf-8"> <title>更新画面</title> <link rel="stylesheet" type="text/css" href="css/ProductInfo.css"> </head> <body> <form action="" method="post" name="product"> <table><c:forEach var="productList" items="${productList}"> <!--商品IDジャンルコード--> <tr> <th align = "left">商品ID</th><th align = "left">ジャンル</th> </tr> <tr> <td><input name ="product_id" type="text" value="" placeholder="${productList.product_id }"></td><td> <select name = "product_genre_code" > <option selected>${productList.product_genre_code }</option> <option>指定なし</option><option>時計</option><option>電子機器</option><option>携帯</option> </select> </td> </tr> <!--商品名メーカー品--> <tr> <th align = "left">商品名</th><th align = "left">メーカー品</th> </tr> <tr> <td><input name = "product_name" type="text" placeholder=${productList.product_name }></td> <td><select name = "product_maker"> <option selected>${productList.product_maker }</option> <option>指定なし</option><option>パナソニック</option><option>ソニー</option><option>シャープ</option> </select> </td> </tr> <!--金額と在庫--> <tr> <th align = "left">金額</th><th align = "left">在庫数</th> </tr> <tr> <td><input name = "product_price" type="text" placeholder=${productList.product_price }></td> <td><input name = "product_stock" type="text" placeholder=${productList.product_stock }></td> </tr> <!--販売個数--> <tr> <th align="left">販売個数</th> </tr> <tr> <td><input name="product_sales" type="text" placeholder=${productList.product_sales }></td> </tr> <!--備考テキストエリア--> <tr><!--備考--> <th align="left">備考</th> </tr> </c:forEach> </table> <table> <tr><!--テキストエリア--> <td><textarea name="product_remarks"></textarea></td> </tr> </table> <input class="sctn" type="image" alt="登録" width="50" height="30" src="img/sc.png" /> </form> </body> </html>

試したこと

・DAOの時点でslListに値が格納されていない可能性を考慮してコンソール出力したが問題なかった。

補足情報

このソースコードはクラスの一部であり、ほかにもメソッドがあります。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

A-pZ

2018/09/26 07:41

サーブレットから取得できないとありますが、サーブレットのコードがあると回答が得られるでしょう。
dice142

2018/09/26 07:42

どこでどういうエラーが起きているのでしょうか?質問文からはコンパイルエラーを解決できないというように読めるのですが、試したことを見ると解決されているように見えます。
m.ts10806

2018/09/26 07:43

あくまで返すためのデータを作っているだけのコードが提示されているように見受けられますが、実際にエラーが起きている、jspに渡すレスポンスのコード、表示側で受け取っているコードはどのようになっているのでしょうか。
mutani

2018/09/26 08:09

A-pZ様 ご連絡ありがとうございます。ご指摘くださいましたサーブレットを質問文に記載いたしました。ご指摘ありがとうございました。
mutani

2018/09/26 08:11

dice142様 ご連絡ありがとうございます。 プログラム自体は正常に動作するようにはなりましたが、DAOクラス内で取得した値をうまくJSPまで持っていけないといった感じで、現在の実行結果がすべて「0」や「1」となってしまいます。
mutani

2018/09/26 08:14

mts10806様 ご連絡ありがとうございます。JSPに渡す処理を行っているサーブレットとJSP(受け取り側のコード)を追記いたしました。 お忙しいとは思いますがご助言、ご教授の程よろしくお願いいたします。
dice142

2018/09/26 08:17

コンパイルエラーが解消されているのでしたら、質問文の「コンパイルエラーになる」はノイズとなるので修正してください。
mutani

2018/09/26 08:23

dice142様 ご指摘いただきました箇所を修正いたしました。ご指摘ありがとうございました。
dice142

2018/09/26 08:30

「selectで取得した値をリストに格納して、servletを介してJSPに出力する。」とありますが、どこにselectで取得している部分があるのでしょうか?提示されたコード内には見当たらない気がしますが。
mutani

2018/09/26 08:57

dice142様 ご連絡ありがとうございます。DAOクラスの10行目にselect文があります。ご確認いただければ幸いです。
dice142

2018/09/26 09:00

select文ではなくselectメソッドの方ですね。DAOクラスのselectメソッドでslListをreturnしていますが、このselectメソッドはどこで呼び出しているのでしょうか?
mutani

2018/09/26 09:07

dice142様 申し訳ございません。勘違いをしておりました。ご指摘いただいた件ですが、一度servletで呼び出してみましたが構文エラーとなりいろいろいじっている間にエラーはなくなりましたが恐らくそのせいで呼び出せていないと思われます。
m.ts10806

2018/09/26 09:09

そこを解消しないとサーブレット、jsp以前の問題ですね。「エラーが出ないように修正」は根本解決になっていません。質問としてはエラーが出るコードとエラー内容を記載するのが具体的な回答を得られるやり方です。
m.ts10806

2018/09/26 10:10 編集

重複コメントのため削除
dice142

2018/09/26 09:11

? 呼び出していないのならそもそもの流れがおかしいことになりませんか?DAOのselectメソッドを呼び出さないと値が取り出せないのではないですか?
mutani

2018/09/26 09:18

mts10806様 質問の仕方が悪く申し訳ございません。私が聞きたかったことはservletでの呼び出し方(書き方)です。試したことの部分にエラーが出ないようにしたと書いたことによって誤解を与えてしまいました。申し訳ございません。
mutani

2018/09/26 09:20

dice142様 仰る通りでございます。ですので、質問の4行目に「servlet内のコードの書き方についてご教示いただけないでしょうか。」と記載させていただきました。ですが、試したことに不要な記載をしたため誤解を与えてしまいました。申し訳ございません。

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

JSP

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

Java

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

servlet

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