- - PR -
JSPにおけるDBからのデータ抽出
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-05-24 10:38
JSPを始めたばかりの初心者です。
行き詰っているので教えていただきたいのですが、 現在DBにHSQLDBを使用し、開発環境はEclipseで、 下記のようにソースを書きました。 *JSPファイル一部抜粋 <p>当選番号入力</p> <p> 第 <% List list = (List)request.getAttribute("list"); if(int i=0;i<list.size();i++){ LotoPage page = (LotoPage)list.get(i); } out.println(page.getInt("kaisu")); %> 回 </p> これで実行すると下記のようなエラーが出てしまいます。 org.apache.jasper.JasperException: JSPのクラスをコンパイルできません JSPファイル: /nyuryoku.jsp の中の4行目でエラーが発生しました 生成されたサーブレットのエラーです: Syntax error on token(s), misplaced construct(s) JSPファイル: /nyuryoku.jsp の中の4行目でエラーが発生しました 生成されたサーブレットのエラーです: Syntax error on token(s), misplaced construct(s) JSPファイル: /nyuryoku.jsp の中の4行目でエラーが発生しました 生成されたサーブレットのエラーです: Syntax error on token ")", ; expected しかし、JSPファイルのソースを下記のように書き換えるとうまくいきます。 <p>当選番号入力</p> <p> 第 <% List list = (List)request.getAttribute("list"); %> <c:forEach var="list" items="${list}"> ${list.kaisu+1} </c:forEach> 回 </p> なぜ最初のソースでうまくいかなかったのか分かりません。 すみませんが、教えていただけないでしょうか? | ||||
|
投稿日時: 2007-05-24 10:52
エラーに
JSPファイル: /nyuryoku.jsp の中の4行目でエラーが発生しました て出ているじゃない。 4行目をまず見ましょう。 提示されたJSPの内容ではどこが4行目なのか分りません。 それはさておき、 提示されたソースから想像できる問題はあります。 ・for文がif文になっています。 ・out.println(page.getInt("kaisu")); で変数pageを使っていますが宣言されていません ・クラスLotoPageはimportされていますか? ぱっと見えるだけでも3点。 問題だらけデスヨ。 | ||||
|
投稿日時: 2007-05-24 13:01
pageって変数名は良くないですね。
JSPのクラスインスタンスを表す暗黙オブジェクトの名前と衝突しています。 http://www.atmarkit.co.jp/fjava/rensai2/jspservlet05/jspsevlet05_1.html [ メッセージ編集済み 編集者: ひろ@ya 編集日時 2007-05-24 13:41 ] | ||||
|
投稿日時: 2007-05-24 15:27
あすか様、ひろ@ya>
ご指摘ありがとうございます。 お二方のご指摘を参考に下記のように修正いたしましたが、 まだエラーになってしまいます。あすか様ご指摘のインポートですが、 下記のようにheader.jspファイルでインポートしています。 <インポート> <%@page import="java.util.List, java.sql.ResultSet, loto.LotoPage"%> <エラー内容> org.apache.jasper.JasperException: JSPのクラスをコンパイルできません JSPファイル: /nyuryoku.jsp の中の4行目でエラーが発生しました 生成されたサーブレットのエラーです: lotopage cannot be resolved <nyuryoku.jsp> 1 :<p>当選番号入力</p> 2 :<p> 3 :第 4 :<% 5 :List list = (List)request.getAttribute("list"); 6 : 7 :for(int i=0;i<list.size();i++){ 8 : LotoPage lotopage = (LotoPage)list.get(i); 9 :} 10:out.println(lotopage.getKaisu()); 11:%> 12:回 13:</p> あと、LotoPage.javaの内容は下記の様になっています。 <LotoPage.java> package loto; public class LotoPage { private int kaisu; public int getKaisu(){ return kaisu; } public void setKaisu(int kai){ this.kaisu = kai; } } あれからかなり悩んでいますが、解決できていないので どうか宜しくお願い致します。 | ||||
|
投稿日時: 2007-05-24 15:44
すみません、解決しました。
For文の前に LotoPage lotopage = new LotoPage(); で宣言を付け加えると解決しました。 あすか様からの助言でありましたが、 私は LotoPage lotopage = (LotoPage)list.get(i); で、宣言と同時にlistを入れていると勘違いしていました。 あすか様、ひろ@ya様、懇切丁寧な助言ありがとうございました。 | ||||
|
投稿日時: 2007-05-25 10:13
ちょおおおおとまって!
変数の有効範囲ってわかってます? forブロック内で宣言した変数は forブロック内でしか有効になりません。 6 :LotoPage lotopage = new LotoPage(); 7 :for(int i=0;i<list.size();i++){ 8 : lotopage = (LotoPage)list.get(i); 9 :} 10:out.println(lotopage.getKaisu()); こう修正したってことですか? これは 6 :LotoPage lotopage = (LotoPage)list.get(list.size()-1); 7 ut.println(lotopage.getKaisu()); とまったく同じ意味です。 for文が無駄です。 何をしたいのかわかりません。 どんなものを作りたいのかわかりませんが 質問用に適当に書いたロジックだった、 と言うのならいいのですが とても心配です。 大丈夫でしょうか。 |
1