下記のような、jspへの受け渡しができずにいます。
ご回答お願いします。
Servletは、
String query = "SELECT * FROM test";
ResultSet resultset
= statement.executeQuery( query );
request.setAttribute("obj",resultset);
ServletContext context = getServletContext();
RequestDispatcher rd =
context.getRequestDispatcher("/kekka.jsp");
rd.forward(request,respons);
とした時、jsp側で、
<%@ page contentType="text/html;charset=Shift_JIS" %>
<%@ page import = "java.sql.*" %>
<%! ResultSet rs = (ResultSet)request.getAttribute("obj"); %>
<% While(rs.next()){String hinmei = rs.getString("hinmei");} %>
<html>
<head>
<title>JSP</title>
</head>
<body>
<table border="0">
<tr>
<td><%=hinmei%></td>
</tr>
</table>
</body>
</html>
と、したいのですが、白い画面になりjspの表示ができません。
やはり、ResultSetオブジェクトのAttributeはできないのでしょうか?
それとも、jspの構文に問題があるのでしょうか?
Vector、Stringは、この形のやり方で表示できたのですが・・・。
間違いを指摘してください。
よろしくお願いします。
No.5ベストアンサー
- 回答日時:
こんばんは、po-netと申します。
JSP側で取得したResultSetオブジェクトがnullでないという確認をしたかどうか・・・という記述がないので、nullでないと仮定して話を進めます。
表示が1つは表示されているようですのでその続きを。。。
サーブレットファイルを見てみますと、
>while(resultset.next()){
>hinmei = resultset.getString("hinmei");
>request.setAttribute("obj", hinmei);
>}
となっていますね。
コレでは、いくらwhileでループをかけても、セッションに格納する段階で"obj"というセッションに上書きしているだけです。
そのため、
>hinmeiに1件しかレコード内容が入っていません。
>servletの
>
>String hinmei;
>while(result.next()){
>hinmei = resultset.getString("hinmei");
>の所で、hinmeiの中身は、
>バナナ
>パイン
>トマト
>の予定なのです。
>
>そして、今回の場合、while内で取得した最後の、"トマト" だけが表示されます。
>servletからjspにAttributeすると、取得した内容が、1件を除きあとの取得内容が消えてしまいます。
>どうしてなんでしょうか?
こういう現象が起きていると考えられます。
int num;
for(int i=0; i<5; i++) {
num = i;
}
System.out.println(i);
この場合、コマンドラインには4しか表示されないですよね。
これと同じ現象が起きているのではないでしょうか。
numを出力する前に、iでさらに上書きすることで、古いデータが消えてしまっているということです。
必ず「バナナ」「パイン」「トマト」という順番で出力されるクエリーを実行しているとき、もし仮に、
>while(resultset.next()){
>hinmei = resultset.getString("hinmei");
>request.setAttribute("obj", hinmei);
>}
というソースを
if(resultset.next()){
hinmei = resultset.getString("hinmei");
request.setAttribute("obj", hinmei);
}
と書き換えて、「バナナ」が表示されましたら間違いありません。
対処法としては、
・一つ一つを違うセッション名で格納。
・Vectorクラスのオブジェクトに格納し、セッションに。
のどちらかが考えられますが、DBのように帰ってくる値の数が不特定の場合は、後者の方が適切かと思います。
___________
それと、質問の「白い画面」の件です。
setAttribute() でセッションに格納した情報は、JSP側では
<jsp:useBean id="***" class="***" scope="***"/>
で取得できますよ。
今回の場合ですと、
<jsp:useBean id="obj" class="java.sql.ResultSet" scope="session" />
でしょうか?
また、while文の位置も少し気になります。
質問のソースを、以下のようにしたらどうでしょう?
<%@ page contentType="text/html;charset=Shift_JIS" %>
<%@ page import = "java.sql.*" %>
<%! ResultSet rs = (ResultSet)request.getAttribute("obj"); %>
<html>
<head>
<title>JSP</title>
</head>
<body>
<table border="0">
<tr>
<td>
<%= while(rs.next()){out.println( rs.getString("hinmei") ); }%>
</td>
</tr>
</table>
</body>
</html>
お返事送れましてすみません。
回答内容を、キチンと理解してお礼をしないと失礼
と思いまして、今になってしまいました。
丁寧な回答、そして、対処法ありがとうございます。
自分としましては、対処法で紹介くださった、Vectorを
使って、と思います。
今更・・・。とお思いでしょうが、DB内容を少し書くと、
hinmei gensanti
バナナ フィリピン
パイン オーストリア
トマト 高知
でして、
Vector obj1 = new Vector();
Vector vhinmei = new Vector();
Vector vgensanti = new Vector();
while(rs.next()){
vhinmei.addElement(rs.getString("hinmei");
vgensanti.addElement(rs.getString("gensanti");
}
obj1.addElement(vhinmei);
obj1.addElement(vgensanti);
request.Attribute("obj1",obj1);
ですかね。
jspでの、取り出し方はもうちょっと、勉強が必要です。
でも、この方法は、ちょっとキレイじゃないですかね?
sessionでのjsp表示も、もう少し勉強してみます。
今回は、本当にありがとうございました。
No.4
- 回答日時:
まったくのあてずっぽうですが、ResultSet のインスタンスを渡すのではなくて、
servlet で、hinmei の文字列を取得して、文字列を request に入れて渡すと、
どうなりますか?
この回答への補足
たびたび、すみません。
a-kumaさんの、おっしゃる通りしてみました・・・。
今回は、whileをservletで行いました。
servletは、
String query = "SELECT * FROM test";
ResultSet resultset
= statement.executeQuery( query );
String hinmei;
while(resultset.next()){
hinmei = resultset.getString("hinmei");
request.setAttribute("obj", hinmei);
}
ServletContext context = getServletContext();
RequestDispatcher rd =
context.getRequestDispatcher("/kekka.jsp");
rd.forward(request,respons);
そして、jspを、
<%@ page contentType="text/html;charset=Shift_JIS" %>
<% String hinmei; %>
<% hinmei = (String)request.getAttribute("obj"); %>
<html>
<head>
<title>JSP</title>
</head>
<body>
<table border="0">
<tr>
<td><%=hinmei%></td>
</tr>
</table>
</body>
</html>
と、したところ、hinmeiに1件しかレコード内容が入っていません。
servletの
String hinmei;
while(result.next()){
hinmei = resultset.getString("hinmei");
の所で、hinmeiの中身は、
バナナ
パイン
トマト
の予定なのです。
そして、今回の場合、while内で取得した最後の、"トマト" だけが表示されます。
servletからjspにAttributeすると、取得した内容が、1件を除きあとの取得
内容が消えてしまいます。
どうしてなんでしょうか?
servlet内に、表示用htmlを生成した時には、キチンと表示されるのですが、
jspに遷すと、こういう状態です。
勉強不足で、すみません。
No.2
- 回答日時:
こんにちわ。
白い画面になるとのことですが、
jspのソース(HTML)が一切読み込まれていないのでしょうか?
そうではなくて、
「hinmeiの値が表示されない」ということであれば・・・
以下の原因ではありませんか?
hinmeiがwhileループの中で宣言されており、
表示しようとしている部分では、
スコープ外になっていますよ。
No.1
- 回答日時:
> <% While(rs.next()){String hinmei = rs.getString("hinmei");} %>
<% String hinmei; %>
<% while(rs.next()){hinmei = rs.getString("hinmei");} %>
かな。while の w が大文字なのは、写し間違いですよね?
この回答への補足
回答ありがとうございます。
a-kumaさんの言うとおり、
> <% String hinmei; %>
> <% while(rs.next()){hinmei = rs.getString("hinmei");} %>
としましたが、jspでの表示ができません。
whileは、写し間違いでした。
Resultsetの中身はキチンと入ってるんですがね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- HTML・CSS 自身のHPにYouTube動画を貼り付けるのが出来なくなり困ってます 1 2022/11/11 10:44
- JavaScript EasyUIのSubGrid(jquery)におけるObjectに入れた連想配列について 1 2022/05/02 11:21
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- HTML・CSS 私の能力からして間違っていないような気がします。 4 2022/09/30 13:24
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
jspからServletを呼び、元のjsp...
-
JSPからJSPへ情報を渡せる?
-
webアプリを作ってます。エラー...
-
eclipseで新規Tomcatプロジェク...
-
Tomcatの仮想ディレクトリ配置...
-
java jsp 数あてゲーム
-
topから孫フレームへのアクセス...
-
jsp:paramアクションタグで配列...
-
jspでbeanを使いたいのです...
-
検索後のページ再表示初期化
-
インクルードファイルの実装 js...
-
フォーム上で押されたボタンに...
-
腕時計の時報をならないように...
-
EXCEL VBAで、EXCELの入力規則...
-
三菱GOTの画面切り替えについて
-
JSPでのサブミット判定
-
ボタンが活性化の場合とは、ボ...
-
プログラミングで例えばゲーム...
-
ASP.NET 画面遷移前の状態を保...
-
ActiveReportのDataSourceについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
jspからServletを呼び、元のjsp...
-
webアプリを作ってます。エラー...
-
JSPからJSPへ情報を渡せる?
-
jspでbeanを使いたいのです...
-
WEB-INF直下のフォルダ
-
JSPのエラー画面(error.jsp)に...
-
javaでカレンダー作成
-
[JSP]1Servletから複数フレーム...
-
return new ActionForward("xxx...
-
Tomcatの仮想ディレクトリ配置...
-
struts2 jspファイル直接参照禁...
-
jsp:paramアクションタグで配列...
-
Servlet-JSP間のhidden要素での...
-
Struts:フレーム内JSPからcssフ...
-
Java PostgreSQL スクリプトレット
-
JSPでimportを行う時の、変数の...
-
javascriptでformの送信後、値...
-
Seaser2のフォルダ構成について
-
jspからjarを参照したいのですが
-
Servletで値を受け取る
おすすめ情報