- - PR -
JSPとサーブレットでのArrayListの受け渡しについて
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2004-10-27 09:39
はじめまして。初めて投稿させていただきます。
よろしくお願いいたします。 サーブレットで取得したDBからの検索結果をJSP側に渡すやり方に ついて、教えてください。 今は、以下のような形でやろうとしています。 ----- List objArray = new ArrayList(); //ArrayListのインスタンス化 : objArray = objDb.subExecQuery(objConn, strKey); //検索実行結果をセット : request.setAttribute("dbr", objArray.toArray()); //リクエストにセット(☆) ----- コンパイルはできるのですが、 実行時に(☆)印の行でエラーが発生し、うまくいきません。 HTTPステータス500-という意味不明のエラー画面になります。 ちなみに上のobjDb.subExecQueryは私が作ったメソッドで、 Listを戻します。 色々調べてみているのですが、なぜエラーになるのか、どう すればいいのか、わからない状態です。 何かご存知の方がいらっしゃいましたら、ご教授いただけないでしょうか? どうぞ、よろしくお願いいたします。 [ メッセージ編集済み 編集者: reiko 編集日時 2004-10-27 09:47 ] [ メッセージ編集済み 編集者: reiko 編集日時 2004-10-27 09:48 ] | ||||
|
投稿日時: 2004-10-27 09:56
あなたが「意味不明」と判断したエラー画面の中に、問題解決のヒントがあります。 エラー画面に表示されるものはスタックトレースと呼ばれるもので、 例外が発生した原因と場所を示しています。 その読み方については以下のURLが参考になるでしょう。 http://milkyway.merseine.nu/JavaIntroduction/JavaIntroduction007.html http://java-house.jp/ml/archive/j-h-b/024782.html#body subExecQuery()の戻り値が怪しい気がしますが、まずはスタックトレースの解析からですね。 | ||||
|
投稿日時: 2004-10-27 10:02
>実行時に(☆)印の行でエラーが発生し、うまくいきません。
対処方法がわからないのであれば、 画面にメッセージ等が出てくるので、コピペするなりして、 回答者にある程度の情報を教えないと適切な回答がしにくいです。 で、 request.setAttribute("dbr", objArray.toArray()); //リクエストにセット(☆) これを System.out.println(objArray); に変更すると、なにが出力されますか。 また System.out.println(objArray.toArray()); に変更するとどうなりますか? | ||||
|
投稿日時: 2004-10-27 11:52
koeさん、かつのりさん
アドバイスどうもありがとうございます。 まずスタックトレースの内容および、JSPとサーブレットのソースですが、 以下のようになっています。 (スタックトレース) ======================================================================== HTTPステータス 500 - type 例外レポート メッセージ 説明 The server encountered an internal error () that prevented it from fulfilling this request. 例外 org.apache.jasper.JasperException org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:372) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) pkgMe.clsGetFileLink.doPost(clsGetFileLink.java:29) javax.servlet.http.HttpServlet.service(HttpServlet.java:709) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) 原因 java.lang.ClassCastException org.apache.jsp.me003_jsp._jspService(me003_jsp.java:49) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) pkgMe.clsGetFileLink.doPost(clsGetFileLink.java:29) javax.servlet.http.HttpServlet.service(HttpServlet.java:709) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) 注意 原因のすべてのスタックトレースは、Apache Tomcat/5.0.28のログに記録されています ======================================================================== (JSP) ======================================================================== <%@ page contentType="text/html;charset=Shift_JIS" %> <%@ page import="java.util.*" %> <%@ page import="pkgMe.clsBeanFileLink" %> <jsp:useBean id="dbr" scope="request" class="java.util.ArrayList"/> <html> <head> <link rel=STYLESHEET type="text/css" href="style.css"> <title>me003契約書</title> </head> <body> <table border="0" width="100%"><tr><td class="tdTitle">契約書画面</td></tr></table> <form name="fm_get_file_link" method="post" action="clsGetFileLink"> <div align="right"> <table border="0"><tr> <td class="tdComments">ファイル名</td> <td class="tdComments"><input type="text" size="30"></td> <td class="tdComments"> <input type ="button" name="bt_search" value="検索(debug用)" onclick="javascript:self.document.fm_get_file_link.submit();"> </td> </tr></table></div> </form> </body> </html> ======================================================================== (サーブレット) ======================================================================== package pkgMe; //必要なクラスを読み込む import javax.servlet.*; import javax.servlet.http.*; import java.sql.*; import java.io.*; import java.util.*; //コントロール public class clsGetFileLink extends HttpServlet { public void doPost( HttpServletRequest request ,HttpServletResponse response ) throws ServletException,IOException { //値をセット List objArray = new ArrayList(); objArray.add("aaa"); objArray.add("bbb"); objArray.add("ccc"); request.setAttribute("dbr", objArray.toArray()); //検索実行メッセージ request.setAttribute("msg", "検索しました。"); //画面再表示 getServletConfig().getServletContext(). getRequestDispatcher("/me003.jsp"). forward(request, response); } } ======================================================================== スタックトレースを見ると、サーブレットからJSPに制御が渡ってJSPのコードを 実行している時にエラーが発生したと判断して、JSPソース内のuseBeanタグの行 だけを削除して再度実行してみたところ、 今度は正常に表示されました。(サーブレットは変更していない) useBeanタグで宣言しているクラスと、サーブレット側でsetAttributeしている オブジェクトのクラスが違うという事なのでしょうか?? 答、あるいはヒントなど何でも結構ですので、ご意見をいただければありがたいです。 よろしくお願いいたします。 | ||||
|
投稿日時: 2004-10-27 12:59
と思ったのなら、何を設定しているのかを調べてみてはいかがでしょうか? | ||||
|
投稿日時: 2004-10-27 13:04
toArray()の意味をわかって使用していますか?
toArray()の戻り値をuseBeanで定義した型にはキャストできませんよ。 | ||||
|
投稿日時: 2004-10-27 13:45
はい、toArray()の意味を理解していませんでした。 修正して実行してみましたら、問題なく動作するようになりました。 かつのりさんのご指摘のおかげで解決いたしました。 どうもありがとうございました。 | ||||
1
