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

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

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

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

MySQL

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

JSP

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

Java

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

Q&A

解決済

1回答

22972閲覧

forEach文を用いてJSPで表示させています。しかし、データが一つしか表示されません。

Sfidante

総合スコア90

foreach

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

MySQL

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

JSP

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

Java

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

0グッド

0クリップ

投稿2015/04/08 01:39

編集2015/04/08 02:05

プログラミング初心者で色々と悩んでおります。
ご教授願います。

まず、MySQLにString型で"1,2,3"のように値が入っており、
それをcandidateAreaに格納しています。
そしてそれをsplitでカンマ毎に分けて、
それぞれに対応したDAOのSELECT文を繰り返し抽出します。
SELECTされたデータをJSPのforEach文で繰り返し処理して表示したいのですが、
最後にSELECTされたデータだけしか表示されないので困っています。
説明が下手、かつ初歩的な質問で申し訳ございません。
何卒よろしく御願い致します。

下記にJAVAのソースコードとJSPの表示ページを記載致します。
他に記載した方がいいものがございましたら、
おっしゃってください。

lang

1int myPairId = (int)ses.getAttribute("MY_PAIR_ID"); 2 // 候補条件を抽出 3 dao.connect(); 4 request.setAttribute("candidateValue", dao.selectCandidate(myPairId)); 5 JavaBeans candidate = (JavaBeans)request.getAttribute("candidateValue"); 6 String candidateArea = candidate.getCan_area(); 7 int canAgeMax = candidate.getCan_age_max(); 8 int canAgeMin = candidate.getCan_age_min(); 9 int canTreat = candidate.getCan_treat(); 10 String[] str = candidateArea.split("," , 0); 11 for(int i = 0; i < str.length; i++){ 12 if(canAgeMax == 50){ 13 ses.setAttribute("pair_today", dao.select50pair(myPairId, str[i], canTreat, canAgeMin)); 14 } 15 else if(canAgeMin >= 18 && canAgeMax <= 49){ 16 ses.setAttribute("pair_today", dao.selectPair18to50(myPairId, canAgeMax, canAgeMin, str[i], canTreat)); 17 } 18 }

lang

1<table border="2"> 2<tr><th>写真</th><th>写真</th><th>名前</th><th>歳</th><th>名前</th><th>歳</th><th>お店</th></tr> 3<c:forEach var="beans" items="${ sessionScope.pair_today }"> 4 <tr> 5 <td>${ beans.photo1 }</td> 6 <td>${ beans.photo2 }</td> 7 <td>${ beans.name1 }</td> 8 <td>${ beans.age1 }</td> 9 <td>${ beans.name2 }</td> 10 <td>${ beans.age2 }</td> 11 <td>${ beans.shop }</td> 12 </tr> 13</c:forEach>

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

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

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

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

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

argius

2015/04/08 01:55

dao.select50pair,selectPair18to50からは何が返されますか? 配列ですか?
Sfidante

2015/04/08 01:57

どちらも配列で返しています。
guest

回答1

0

ベストアンサー

Java側のforループで、pair_todayに毎回上書きしていますね。
いったん、Listなどに全部格納した後で、ses.setAttribute("pair_today", records)すればできると思います。

例:

lang

1// import java.util.*; 2 3List<JavaBeans> records = new ArrayList<>(); 4String[] str = candidateArea.split("," , 0); 5for (int i = 0; i < str.length; i++) { 6 if (canAgeMax == 50) { 7 Collections.addAll(records, dao.select50pair(myPairId, str[i], canTreat, canAgeMin)); 8 } 9 else if (canAgeMin >= 18 && canAgeMax <= 49) { 10 Collections.addAll(records, dao.selectPair18to50(myPairId, canAgeMax, canAgeMin, str[i], canTreat)); 11 } 12} 13ses.setAttribute("pair_today", records);

投稿2015/04/08 02:05

編集2015/04/08 02:41
argius

総合スコア9390

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

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

Sfidante

2015/04/09 03:05

返信が遅くなり申し訳ございません。 回答ありがとうございます。 ご指摘通り、"today_pair"に毎回上書きされておりました。 ですが、うまく配列に格納できず、またしても詰まってしまいました。 理由と致しましては、addAllメソッドで下記のエラーがでたことによります。 The method addAll(Collection<? super T>, T...) in the type Collections is not applicable for the arguments (List<JavaBeans>, List<JavaBeans>) 他にも調べて配列への格納を色々試してみたのですが、 うまくいきませんでした。 大変申し訳ないのですが、今一度ご教授願います。
argius

2015/04/09 03:58

配列とおっしゃっていたので、例ではJavaBeans[]が返される想定で書きました。Listは配列と似ていますが、配列ではありません。 DAOの検索結果がList<JavaBeans>なら、records.addAdd(dao.select50pair(myPairId, str[i], canTreat, canAgeMin));のように書けます。
argius

2015/04/09 03:59

間違えました。records.addAllです。
Sfidante

2015/04/10 01:30

ありがとうございます。 目的のデータを取得できました。 大変ご迷惑をおかけしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問