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

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

ただいまの
回答率

90.47%

  • Java

    16164questions

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

  • MySQL

    7143questions

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

  • JSP

    1048questions

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

  • servlet

    532questions

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

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

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,924

mutani

score 15

 前提・実現したいこと

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

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

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

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

 該当のソースコード

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;
    }
}
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);

        }
    }
<%@ 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ページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

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

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

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

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • dice142

    2018/09/26 18:11

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

    キャンセル

  • mutani

    2018/09/26 18:18

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

    キャンセル

  • mutani

    2018/09/26 18:20

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

    キャンセル

回答 2

checkベストアンサー

+2

ようやく合点がいきました。
要は「サーブレットからDAOのselectメソッドの呼び出し方及び値の受け取り方がわからない」ということですね。

ただ、質問者様のために(というか確認の意を込めて)いくつか整理しておきます。
まず実行の順ですが、以下のようになっているはずです。

  1. (おそらく)なんらかのJSPからサーブレットにGETメソッドもしくはPOSTメソッドでデータを送る
  2. サーブレットでformの値を受け取り、Beansインスタンスに格納
  3. DBとのやりとりのためにDAOのselectメソッドを呼び出し、リストを取得
  4. JSPにデータを渡し、JSPで表示処理を行う

で、おそらく1,2,4の手順は既にもしくは仮に実装できているもので、
3の手順の方法がわからないので、提示したコードにはその部分が抜けた状態で載せてあるんですよね?
(ここで質問者様と回答者側で混乱が発生してた)

さて、slListの取得の方法ですが、以下の手順で行います。

  1. DAOインスタンスの生成
  2. 生成したDAOインスタンスのselectメソッドを呼び出し、なんらかの変数で受け取る

一応コードの書き方とあるので、簡単に載せます。

DAO hoge = new DAO();
ArrayList<Bean> huga = hoge.select(bean);

こんな感じで取得できるはずです。
(変数名とかクラス名とか適当なので補ってください。)


一応質問されてたのはここまでですが、手順4のサーブレット→JSPのデータの受け渡しが
どうにも上手くいってないような気がしてならないので書きます。
(私の知らない方法でデータの受け渡しができてるのであれば問題ないです。)

普通は、サーブレット側でsetAttributeでスコープに値を保存し、
JSP側でgetAttributeでスコープに保存していた値を取得するように行います。

しかし、mts10806様の仰るようにコード内にgetAttributeがないので
サーブレット側でsetAttributeで保存した値を受け取っていないのではないかと思います。

ともあれ、今回の質問の範囲外ではあるので、その場合は新たにご質問されるとよろしいかと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/09/26 19:01

    dice142様 ご回答ありがとうございます。
    不手際の多い質問にもかかわらず、丁寧な回答をくださいましてありがとうございます。
    今後は分かりやすい質問(要点をまとめた質問)を心がけていきます。
    後ほど回答くださいました3のリスト取得部分を実装してみます。
    本当にありがとうございます。

    キャンセル

  • 2018/09/26 19:04

    情報をまとめるのは難しいですが、徐々に慣れていきましょう。

    キャンセル

  • 2018/09/27 10:23

    ありがとうございます。

    キャンセル

0

もしかしたら他で設定などしているのかもしれませんが、
提示されたコードを見る限りjsp側でgetAttributeしていないのでそもそも渡された情報を受け取っていないよに見受けられます。

基本的にはsetAttributeされた情報はjspでgetAttributeすることで受け取れます。
ただ気を付けないといけないのは確かObject型で渡されるので正しくキャストした上で受け取る必要がありますので、
jsp側でselectを作っているDAOのクラスをimportするなどして連携させる必要がありますね。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/09/26 17:55

    ご回答ありがとうございます。
    試しては見ますが、そもそもservletで受け取った値をコンソール出力したときに正しい値を受け取れていないようです。
    また、コンソール出力した値とJSPで出力した値は同じ値なので、JSP側で受け取れていると考えております。
    さらに質問をするようで申し訳ございませんが、ほかのJSPもこのような書き方で学習を進めてきましたが今後の為にもmts10806様が仰ったようにgetAttributeで値を受け取ったほうが良いのでしょうか。
    五月雨式の質問で申し訳ございませんが、ご回答いただけると幸いです。
    何卒よろしくお願いいたします。

    キャンセル

  • 2018/09/26 17:59

    「このような書き方」がどのような書き方をしているかコードからは今一つ読み取れていませんが・・。
    あくまでサーブレットからjspに渡したいのではないのですか?
    適当な、例えば「test」とか文字列の受け渡しはきちんとできている前提で話を進めてますよね?
    手段は1つではありませんが、コードを読んだ限りで回答しています。
    もし関係している情報で提示していない情報があればなるべく全て提示された方が良いように思います。例えばweb.xmlの内容とか。

    キャンセル

  • 2018/09/26 18:25

    書き方の質問については、質問文にのせてあるJSPのソースコードのことを指しています。
    分かり辛く申し訳ございません。
    また、[test]の文字列の受け渡しを行ってみましたが、正常に表示されました。
    web.xmlの内容はイマイチわからないので、編集しておりません。

    キャンセル

  • 2018/09/26 19:16

    たぶん既に回答で指摘されているように情報整理の粒度と各種機能の理解度にも影響していそうに思います。
    文字列の受け渡しをどのように実現されたかわかりませんが、要件を整理して細分化し、少しずつ問題を解決していったほうが良いように思います。
    xmlについてはJavaでサーブレットを学ぶ上では必須とも言えるので少しずつ理解していくようにしてください。

    キャンセル

  • 2018/09/27 10:25

    ご親切にありがとうございます。
    今回の質問の仕方や、問題解決の方法について非常に勉強になりました。
    まだまだ未熟ではありますが、精進していきます。

    キャンセル

  • 2018/09/27 10:30

    解決したようで何よりです
    がんばってください。

    キャンセル

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

  • ただいまの回答率 90.47%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

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

  • Java

    16164questions

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

  • MySQL

    7143questions

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

  • JSP

    1048questions

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

  • servlet

    532questions

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