- PR -

scope="session"でJSPで表示ができません

投稿者投稿内容
kani
会議室デビュー日: 2003/12/12
投稿数: 5
投稿日時: 2003-12-12 23:55
こんにちは初めましてkaniです。
JAVAの初心者なのですがJSPのことで質問です。
環境は
----------
Win2000pro
MS-Access2000(JDBC→ODBC)
TOMCAT 5
j2sdk1.4.2
----------
こんな感じでMVC設計でIDを入力すると検索して該当者を表示
と、簡単なものを作りましたが。
JSPよりJavaBeanClassのプロパティーが正しく表示されません。
<jsp:useBean id="testbean" scope="session" class="packkan.BeanSQLTest"/>
scope="session"にすると違うHTMLを吐き出しているようです。
scope="request"にするとプロパテティーは値なしですが
HTMLは吐き出されます。
しかし、JavaBeanClassはテスト用のJAVAアプリケーションから
たたくと正常に値を返してくれるのです。なのでJavaBeanClassには問題ないと思うのですが
もちろんAccessDBにも値は入っているしJAVAアプリケーションからちゃんと
取り出せています。
以下にservletコントロールのJSP呼び出し部分とJSPを貼り付けておきます。
ほかに何かあれば貼り付けます。

説明が下手ですいませんがヒント、解決法があればよろしくお願いします。

/*JSP呼び出し*/
//ViewであるJSPを呼び出す
HttpSession session = request.getSession(true);
session.setAttribute("testbean",testbean);
getServletContext().getRequestDispatcher("/JspKanTest.jsp").forward(request, response);
-----------------
以下はJSPソースコードです。
<html>
<head>
<title>JSP-出力結果</title>
</head>
<body>
<center>
<!-- /* コンテンツタイプの設定 */ -->
<%@ page contentType="text/html; charset=Shift_JIS" %>

<!-- /* Javabeanを参照 */ -->
<jsp:useBean id="testbean" scope="session" class="packkan.BeanSQLTest"/>


<!-- /* 結果出力 */ -->
<div align="center"><h4>検索結果 出力</h4></div>

<!-- /*結果表示*/ -->
<Table>
<tr>
<th>検索対象IDは:</th><td><jsp:getProperty name="testbean" property="ID" />です。</td>
</tr>
<tr>
<th>名前は:</th><td><jsp:getProperty name="testbean" property="NAME" />です。</td>
</tr>
<tr>
<th>性別は:</th><td><jsp:getProperty name="testbean" property="SEX" />です。</td>
</tr>
</table>
<br>検索終了
</center>
</body>
</html>


山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2003-12-13 00:47
>scope="session"にすると違うHTMLを吐き出しているようです。
これは期待していない値が表示されるということですか?
>scope="request"にするとプロパテティーは値なしですが
>HTMLは吐き出されます。
値なしとは、null または 空白 といった意味でしょうか?
kani
会議室デビュー日: 2003/12/12
投稿数: 5
投稿日時: 2003-12-13 01:02
>>scope="session"にすると違うHTMLを吐き出しているようです。
>これは期待していない値が表示されるということですか?
期待していない値ではなく、違うHTML(雛形みたいな)がはき出されます。
これはエラーなので違うJSPが呼ばれているのでしょうか?。。。。

>>scope="request"にするとプロパティーは値なしですが
>>HTMLは吐き出されます。
>値なしとは、null または 空白 といった意味でしょうか?

String値にはnullがintには0が入っています。
この場合はJspKanTest.jsp(目的のJSP)がきちんと呼ばれHTMLがはき出されます。


ちば
大ベテラン
会議室デビュー日: 2003/02/14
投稿数: 114
お住まい・勤務地: 都内勤務
投稿日時: 2003-12-13 03:07
とりあえず、sessionにちゃんとオブジェクトが入っているのか確認することを
お勧めします。

たとえばこんなの↓を<%@ page 〜 の下に追加するなど

<%@ page session="true" %>
<%@ page import="packkan.*" %>
<%
BeanSQLTest testbean = session.getAttribute("testbean");
out.println("---------------------------------------------------");
out.println("ID : " + testbean.getID() );
out.println("NAME : " + testbean.getNAME() );
out.println("SEX : " + testbean.getSEX() );
out.println("---------------------------------------------------");
%>

久々に書いたので間違っているところがあるかもしれませんが・・・。
Anthyhime
ぬし
会議室デビュー日: 2002/09/10
投稿数: 437
投稿日時: 2003-12-13 07:22
例外がスローされているっぽいですね。
コントローラーが例外を破棄したりしていないですか?
例外が分ければ一発で解決する問題かもしれませんよ。

[ メッセージ編集済み 編集者: Anthyhime 編集日時 2003-12-13 07:27 ]
コガちゃん
会議室デビュー日: 2003/12/13
投稿数: 10
投稿日時: 2003-12-13 12:38
どんな結果が出ているか画面をみてないので分かりませんが、セッションのトラブルでは
1.すでに同じ名前で他のクラスのオブジェクトがsessionに登録されている
2.classの型が違っている(キャストするときはtypeで指定します)
3.直前にsessionを破棄している(validateメソッドを呼んでいる)
なんてのが多かったですね、自分の場合
kani
会議室デビュー日: 2003/12/12
投稿数: 5
投稿日時: 2003-12-13 14:43
皆さんありがとうございます。
あんまり理解ができていないのですが
>1.すでに同じ名前で他のクラスのオブジェクトがsessionに登録されている
という指摘にtestbeanというクラスが既にあったので
JavaClassのIDを"testbean"からid="mybean"にしました。
イロイロやっては見たのですが
期待しているHTMLは吐き出されるようになりました。(以下のような画面)
--------------------------------
検索結果 出力
検索対象IDは: 0です。
名前は: nullです。
性別は: 0です。

検索終了
--------------------------------
しかし相変わらず値が渡ってきていません
サーブレットコントローラーソースも参考に
貼り付けます
何かご指摘があればよろしくお願いいたします。
----------------------------------------------------------------
//servlet コントロールプログラム
package packkan;

import javax.servlet.*;
import javax.servlet.http.*;

import java.io.*;

public class TestKanServlet extends HttpServlet{

//doGet
public void doGet(HttpServletRequest request,HttpServletResponse response){doTask(request,response);}
//doPost
public void doPost(HttpServletRequest request,HttpServletResponse response){doTask(request,response);}

//doTask Get Post どっちでも受け取る
public void doTask(HttpServletRequest request,HttpServletResponse response){
try{
//検索ID
int id = Integer.parseInt(request.getParameter("id"));

/* JavaBean呼び出し */
/*業務Beanを呼ぶ*/
packkan.BeanSQLTest mybean = new packkan.BeanSQLTest();

/*パラメータセット*/
mybean.setkey(id);

/* SQLmybeanのメッソドを呼ぶ */
mybean.getdb();

/*JSP呼び出し*/
//ViewであるJSPを呼び出す
HttpSession session = request.getSession(true);

session.setAttribute("mybean",mybean);

getServletContext().getRequestDispatcher("/JspKanTest.jsp").forward(request, response);

}catch(Exception e){
e.printStackTrace();
}
}

}
----------------------------------------------------------------
ふーばー
大ベテラン
会議室デビュー日: 2003/06/05
投稿数: 163
投稿日時: 2003-12-14 10:06
引用:

<jsp:useBean id="testbean" scope="session" class="packkan.BeanSQLTest"/>


引用:

BeanSQLTest testbean = session.getAttribute("testbean");



引用:

session.setAttribute("mybean",mybean);



JSPで、ちゃんと attribute 名を「mybeam」に変えて試していますか?

スキルアップ/キャリアアップ(JOB@IT)