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

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

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

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

JSP

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

Java

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

Struts 2

Apache Struts 2は、Apache Strutsプロジェクトにて開発されているオープンソースのJavaベースのWebアプリケーションフレームワークです。Sturts1に比べ、設定ファイルの削減、依存性の注入、POJO等の改善がなされています。

Q&A

3回答

7176閲覧

画面にデータを保持する方法

freeair.

総合スコア15

MySQL

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

JSP

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

Java

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

Struts 2

Apache Struts 2は、Apache Strutsプロジェクトにて開発されているオープンソースのJavaベースのWebアプリケーションフレームワークです。Sturts1に比べ、設定ファイルの削減、依存性の注入、POJO等の改善がなされています。

0グッド

0クリップ

投稿2016/09/29 05:06

編集2022/01/12 10:55

入力フォームに記入し、追加ボタンを押すと該当するレコードを
DBから引っ張ってきて画面に表示する、というものを作っているんですが
複数回行うとその都度画面が初期化されるので1レコード分しか表示されません。
画面を表示してる間はどんどん追加されていく仕様にしたいです。
どのように変更を加えるとよいでしょうか。
strutsのhiddenタグ使うのかなあとか考えてますがどうなんでしょう。
ご助言承りたく投稿させていただきました。よろしくお願いします。

以下コード

jsp

<%@ taglib prefix="s" uri="/struts-tags"%> <s:textfield name="searchBox"> <input type="button" onclick="searchAdd()" value="追加"> <table> <s:iterator value="myList" status="rowstatus"> <tr> <td><s:property value="myList.itemName" /></td> <td><s:property value="myList.itemStatus1" /></td> <td><s:property value="myList.itemStatus2" /></td> </tr> </s:iterator> </table> <s:submit id='myListSet' value="検索" method='myListSet' /> <!--非表示ボタン-->

Javascript

1function searchAdd() { 2 document.getElementById('myListSet').click(); 3}

Java

1public String myListSet() { 2MyTestAccess access = new MyTestAccess(getDbAccessInfo()); 3myList = access.selectMyList(searchbox); //DBからsearchboxが一致するレコードを取得する 4return "execute"; //画面(jsp)を再表示する 5} 6 7//MyTestAccessクラス 8public ArrayList<MyTestEntity> selectMyList(String search) { 9 StringBuffer stringBuffer = new StringBuffer(); 10 stringBuffer.append("SELECT itemName"); 11 stringBuffer.append(" ,itemStatus1"); 12 stringBuffer.append(" ,itemStatus2"); 13 stringBuffer.append(" ,FROM MY_TEST_TABLE"); 14 stringBuffer.append(" WHERE itemName = "); 15 stringBuffer.append(search); 16 String sql = stringBuffer.toString(); 17 logger.sqllog(sql); 18 MyTestEntity record = null; 19 ArrayList<MyTestEntity> ret = new ArrayList<MyTestEntity>(); 20 try{ 21 stmt = getConn().createStatement(); 22 result = stmt.executeQuery(sql); 23 while(result.next()) { 24 record = new MyTestEntity(); 25 record.setItemName(result.getString("itemName")); 26 record.setItemStatus1(result.getString("itemStatus1")); 27 record.setItemStatus2(result.getString("itemStatus2")); 28 ret.add(record); 29 } 30 } 31 return ret; 32}

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

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

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

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

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

guest

回答3

0

selectMyList(String search) でSELECTした内容を返していますが、検索結果を保持したいのであれば以下の3つの方法があるでしょうか。

  • 検索条件をhiddenないしはHttpSessionへ保持しておいて、SQL文ではIN句を使って複数の値で再検索
  • 検索結果を保持しておいて、SQL文はそのままにする。
  • Struts2-jQueryプラグインを使って、検索結果を表示する部分はAjaxで実行した結果をレスポンスから取得し、行へ追加する。

一番わかりやすい形は最初のでしょう。

投稿2016/10/04 04:10

A-pZ

総合スコア12011

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

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

0

selectMyList()関数の戻り値はListですか?
これが1つのデータしか返していない…なんてことはありませんか?
このメソッドについてもソースがあると原因が特定しやすくなります。

あと細かいですが、Javaではクラスは先頭大文字が一般的です。
今回の場合、myTestAccess → MyTestAccessですね。

最後に、これは構文エラーになりませんか?

Java

1return = "execute";

正しくはこうかと。

Java

1return "execute";

投稿2016/09/29 15:18

goute

総合スコア216

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

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

freeair.

2016/09/30 02:29

ご指摘ありがとうございます。 質問の修正をさせていただきました。 どこまで書けばよいのかイマイチ分からず、不足がありましたらすみません。 どうぞよろしくお願いします。
goute

2016/09/30 15:42

デバッグなどでreturnの時点のmyListは確認されましたか? おそらく、MyTestEntityをループ外で初期化し、ループ内でインスタンス生成しているため、1件しか生成されてないのだと思われます。 オブジェクトは参照型なので、ループの中で定義~リストへ追加~削除としてやる必要があります。 中でnewしても、おそらく配列の中は増えないままになっているのではないでしょうか。 また、stringBufferにクエリを突っ込んでいますが、こういった記載はかなり危険です。 「SQLインジェクション」「プレースホルダ」などで調べてみると良いと思います。 もっというと、StringBuilerを使うほうが望ましいですね。 このあたり、いくらでも親切な記事がネット上にあると思いますよ。
goute

2016/09/30 15:44

おそらく以下のように記載すればよいかと。 while(result.next()) { MyTestEntity record = new MyTestEntity(); record.setItemName(result.getString("itemName")); record.setItemStatus1(result.getString("itemStatus1")); record.setItemStatus2(result.getString("itemStatus2")); ret.add(record); }
guest

0

JavaのmyListSet()がStringを返していますが、Stringなのでデータを1個しか保持できません。
そうではなく、java.util.Listを返すようにしたらどうですか?

投稿2016/09/29 05:24

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

freeair.

2016/09/29 05:44

ご回答ありがとうございます。 returnで返しているのは、jspのURIです。 それをリスト化しても意味はないですよね?
退会済みユーザー

退会済みユーザー

2016/09/29 05:57

そうですね、的はずれな回答でした。 一つの方法として、セッションに情報を格納していく方法があります。 ただセッションに大量の情報を格納するとガーベジコレクションが発生しやすいデメリットがあり、注意が必要です。
freeair.

2016/09/29 06:09

ありがとうございます。 そうですか・・・。 セッションやらクッキーやらキャッシュやらは難しそうで 画面移動がなければ、お手軽にできる方法があるかな~って思ったのですが 観念したほうがいいのですかね~。 しかしどこから手を付ければいいのか皆目見当もつきません。 重ね重ね申し訳ないですがご助言頂けませんでしょうか。。
退会済みユーザー

退会済みユーザー

2016/09/29 15:03

Strutsの経験が殆どなく、Strutsの流儀を知らないのですが、基本的なサーブレットであれば、HttpServletRequestクラスのgetSession()を使います。 http://www.ne.jp/asahi/hishidama/home/tech/java/j2ee/session.html 参考になるか分かりませんが、 とりあえず、1つのアイデアを提示します。 public String myListSet() { //DBから検索結果を取得 myTestAccess access = new myTestAccess(getDbAccessInfo()); List list1 = access.selectMyList(searchbox); //セッションから今までの検索結果のリストを取得 //ただ、HttpServletRequestオブジェクトのrequestをどうやって取得できるか? HttpSession session = request.getSession(); if(session != null){ myList = (List)session.getAttribute("myList"); if(myList == null){ myList = new ArrayList(); //セッションに検索結果を蓄積するリストを格納 session.setAttribute("myList", myList); } //今回の検索結果を追加 myList.addAll(list1); } return = "execute"; } (動作検証していないので、プログラミングミスがあるかもしれませんがご容赦を…)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問