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

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

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

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

Java

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

解決済

リスト内が毎回初期化される

yamamoto_isamu
yamamoto_isamu

総合スコア25

MySQL

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

Java

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

2回答

0評価

0クリップ

567閲覧

投稿2022/04/05 10:23

編集2022/04/06 20:18

今javaの勉強をしていて商品管理のシステムを作っています。
追加ボタンを押すと商品がリストに追加され、それが表示されるという処理をしています。
追加ボタンを押すたびにリストが初期化されてしまう状況です。
何かアドバイスいただけると幸いです。
よろしくお願いします。

サーブレット

package Section3; import java.io.IOException; import java.util.ArrayList; import java.util.List; import DAO.SalesSearchDAO; import bean.Product; import jakarta.servlet.RequestDispatcher; import jakarta.servlet.ServletContext; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpSession; @WebServlet("/AddSalesServlet") public class AddSalesServlet extends HttpServlet{ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String code = request.getParameter("product_inf"); int quantity = Integer.parseInt(request.getParameter("quantity")); SalesSearchDAO dao = new SalesSearchDAO(); List<Product> saleslist = (dao.search(quantity , code)); HttpSession session = request.getSession(); session.setAttribute("saleslist", saleslist); RequestDispatcher rd = request.getRequestDispatcher("./sales.jsp"); rd.forward(request, response); } }

DAO

public List<Product> search(int quantity , String code){ int product_code = Integer.parseInt(code); List<Product> saleslist = new ArrayList<>(); Connection con = null; Statement smt = null; String sql = null; try { con = getConnection(); smt = con.createStatement(); sql = "SELECT product_name FROM m_product WHERE product_code = " + product_code + " "; rs = smt.executeQuery(sql); while (rs.next()) { String name = rs.getString("product_name"); Product product = new Product(quantity , name , code); saleslist.add(product); } }catch (Exception e) { throw new IllegalStateException(e); }finally { if(smt != null) { try{smt.close();}catch(SQLException ignore){} } if(con != null) { try{con.close();}catch(SQLException ignore){} } } return saleslist; }

JSP

<h1>売上登録</h1> <div style="padding: 0 0 20px 46px"> <label style="text-align: center;">売上日</label> <% GregorianCalendar cal = new GregorianCalendar(); SimpleDateFormat format = new SimpleDateFormat("yyyy/M/d"); String datestr = format.format(cal.getTime()); out.println(datestr); %> </div> <div style="text-align: center;"> <form method="POST" action="./AddSalesServlet" style="margin-bottom: 50px"> <div style="boder-bottom: 1px solid"> <label style="padding-rigth: 100px">商品名</label> <select name="product_inf" type = "hidden" style="padding-rigth: 40px; width: 250px;"> <%for (Product product : list) {%> <option value="<%= product.getproduct_code()%>"><%= product.getproduct_name()%></option> <%}%> </select> <label style="padding-rigth: 30px;">数量</label> <input type="text" name="quantity" style="width: 40px;"> <button type="submit"> 追加</button> </div> </form> </div> <% %> <div style="boder: solid 1px"> <table> <tr> <th style="width: 20%">商品名</th> <th style="width: 5%">数量</th> </tr> <% for (Product product : list) { %> <tr> <td><%=product.getproduct_name()%></td> <td><%=product.getquantity()%></td> </tr> <%}%> <% if(saleslist!=null) { for (Product product : saleslist) { %> <tr> <td><%=product.getproduct_name()%></td> <td><%=product.getquantity()%></td> </tr> <% } } %> </table> </div> <form style="margin-bottom: 30px"> <button type="submit" style="margin-left: 83%">登録</button> </form>
</body> </html>

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

jimbe

2022/04/05 11:36

どこまで「想定通り実行」されていて、どこまで「想定通りにデータが届き/生成されている」でしょうか。 たとえば DAO の search メソッドのパラメータは想定通りの値で呼ばれているでしょうか。 編集した SQL 文は想定通りであり、それによってデータベースから想定通りのデータが saleslist に入っているでしょうか。 (ちなみに、 SQL 文を文字列として編集することはセキュリティ上問題があります。) JSP に saleslist がちゃんと渡っているでしょうか。
yamamoto_isamu

2022/04/05 11:53

説明不足で失礼いたしました。 値を取りSQL文で必要な情報は取得できています。 またリストには想定通りの値を入れることができており、JSPにも欲しい値を表示できています。 この一連の処理に関しては問題なく動いています。 2回目以降の追加時に1度目にリストに入れた内容を保持しておきたいという処理ができておりません。 追加を押すたびにリフトの内容がリセットされてしまうのでリストの値を保持しておきたいというのがやりたいことです。
madoka-t

2022/04/05 12:00

見たところ、データを取得するコードしかないように見えますが、リストの値の保持はどのように行う想定でしたか? 例えば、DBに保存する、セッションに保存する、ブラウザのローカルストレージに保存するなど。 AddSalesServletというServletがあるようなので、DBに保存するのかな?という予感はありますが、現在提示されているコードだけでは正確な回答はできない気がしますね。
yamamoto_isamu

2022/04/05 12:28

値を保持しておいてまとめてDBに登録するという仕様にしたいのでサーブレットの中で保持しておきたいと考えています。 DAOでリストに値が入りそれをサーブレットでセッションに入れた場合2回め以降の処理の際にセッションの中に前の値が入ったままになるのでしょうか??
jimbe

2022/04/05 18:51

表示自体に問題は無いものの、登録操作をしてもその後の表示に登録したものが追加されないということでしょうか。 そもそも「サーブレット」「DAO」「JSP」とされているコードがどのタイミングで動くものなのかが分かりません。 JSP というのは sales.jsp でしょうか。 DAO は SalesSearchDAO クラスの search メソッド部分で、 サーブレットは… AddSalesServlet の? どの部分でしょう。
yamamoto_isamu

2022/04/05 21:24

その通りです。 追加した物がどんどん表示されるようにしたいと考えていますが、今は追加するたびに表示は新しく追加したものに上書きされてしまうという状況です。 JSPとDAOはおっしゃる通りです。 AddSalesServletは上記に記載しているサーブレットです。 追加ボタンを押すとAddSalesServletに飛んでいきDAOでDBから必要な情報を取り出しリストに入れています。 AddSalesServletはそのリストを取得してJSPに返すという流れで動いています。
yamamoto_isamu

2022/04/06 01:41

自分でもいろいろ調べながら進めてみました。 DAOの中のList<Product> saleslist = new ArrayList<>();で毎回初期化が起こっていると思うのでここの処理を最初にの一回だけにすればリストにたまっていくのかなと思います。 DAO内でList<Product> saleslist = new ArrayList<>();の処理を最初の一回だけにする方法なにかありませんでしょうか?
jimbe

2022/04/06 05:57

出来ましたら、「サーブレット」等の記述をファイル名にしてくださると分かり易いです。 >追加ボタンを押すとAddSalesServletに飛んでいきDAOでDBから必要>情報を取り出しリストに入れています。 >AddSalesServletはそのリストを取得してJSPに返すという流れ 既に madoka-t さんがご指摘されていますが、どこに「登録したデータをリストに入れる処理」があるでしょうか。 どうも、登録の処理も一覧表示の処理もデータベースの使い方もあちこちに綻びがあるように見えます。 そもそも search メソッドは ”これまで登録処理をしたデータを返す” メソッドでしょうか? パラメータや処理内容からはそうは見えません。 単に "指定されたプロダクトコードのマスター情報("m_product"テーブル?)を Product オブジェクトのリストで返す" だけに見えます。(なのになぜか quantity が入るという謎もあります。) 最終的に登録したデータ(プロダクトコードと数量)が入るテーブルはどこなのでしょうか。

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

MySQL

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

Java

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。