- PR -

jsp:useBean のIDを

1
投稿者投稿内容
ringo
会議室デビュー日: 2006/05/12
投稿数: 16
投稿日時: 2006-05-16 10:52
お世話になっています。
login.jsp,list.jsp という2つのJSPを用意し、login.jspでBeanに
ログイン名を設定し、list.jspでは  ××さん。
と表示させる初歩のサーブレットJSPを作成しています。
下記は list.jsp のコードですが 2行目の useBean id に現在指定中の
bean という文字列以外を指定すると "××さん" の部分だけ
表示されなくなってしまうのです。つまりBeanにsetしてあるUserNameが
Nullになっているということまではログ等を使って分かったのですが、
なぜ bean だと成功し、たとえばbean1とかにidを変更(もちろんjsp中のコードも変更)
するとsetした値がNULLになるのかが分かりません。
サーブレットのほうでBeanクラスをNewする処理はその間動いていません。
どなたかご教授いただけないでしょうか?

<%@page contentType="text/html; charset=SJIS" %>
<jsp:useBean id="bean" class="loginManager.LoginBean" scope="request"/>
<html>
<head>
<title>KRequest Page</title>
</head>
<body>
<form name="form" action="LoginServlet" method="post">
<p>First Sample</p>
<%-- 名前、挨拶メッセージが設定されていたら表示します --%>
<% if(bean.getUserName()!=null){ %>
<h1><%=bean.getUserName()%>さん</h1>
<%}%>
<% if(bean.getGreetMsg()!=null){ %>
<h1><font color="green"><%=bean.getGreetMsg()%></font></h1>
<%}%>
<input type="submit" name="submitValue" value="back">
<input type="submit" name="submitValue" value="OK">
<%-- ページ名をHiddenで持ちます --%>
<input type="hidden" name="pageName" value="list">
</form>
</body>
</html>

動作環境 WindowsXP
     eclips2.1
     j2sdk1.4.2_04
     Tomcat 5.0

[ メッセージ編集済み 編集者: ringo 編集日時 2006-05-16 10:53 ]
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2006-05-16 11:09
beanが勝手に生成されて中身が入るわけではないので、どこかで生成されて属性の値が
設定されているわけです。このbeanはリクエストスコープなので、このJSPにフォワード
しているサーブレットなりJSPなりでこのbeanを生成してrequestオブジェクトに設定
、つまり、以下のような処理が実行されているはずです。

コード:
loginManager.LoginBean loginBean = new loginManager.LoginBean();
loginBean.setUserName("....");
loginBean.setGreetMsg("....");
request.setAttribute("bean", loginBean);


他のIDでは取り出せないのは、requestオブジェクトに設定した際に指定した名前と
対応しているからです。
ringo
会議室デビュー日: 2006/05/12
投稿数: 16
投稿日時: 2006-05-16 11:24
UKさん、ありがとうございます。

引用:

他のIDでは取り出せないのは、requestオブジェクトに設定した際に指定した名前と
対応しているからです。



折角教えていただいているのに、理解が遅くて申し訳ないのですが、

私の環境で、サーブレットとして作成している LoginServlet.javaにおいて
LoginBean bean = new LoginBean();
という風に記述しているから ここでのid名は"bean"でないとうまく動かない、
ということなのでしょうか?

だとしたら一つ疑問があります。
前回引用した list.jsp は Beanから登録されているUserNameを
取り出して表示するものでしたが、そのUserNameを登録する際には
別のJSP(login.jsp)を使用しております。
そちらのほうでは以下のような記述としており、idに"bean"を使用しておりません。

以下のJSPがコード表記になると
loginManager.LoginBean loginBean = new loginManager.LoginBean();
loginBean.setUserName("....");
loginBean.setGreetMsg("....");
request.setAttribute("loginBean ", loginBean);

ということになったりする・・・ということはないのでしょうか?

とんちんかんなことを言っていたら済みません。

引用:

<%@page contentType="text/html; charset=SJIS" %>
<jsp:useBean id="loginbean" class="loginManager.LoginBean" scope="request"/>
<html>
<head>
<title>KREQUEST Start Page</title>
</head>
<body>
<form name="form" action="LoginServlet" method="post">
<p>First Sample</p>
<%-- ここにエラーメッセージを表示 --%>
<% if (loginbean.getErrMsg()!=null){ %>
<font color="red">エラー:<%=loginbean.getErrMsg()%></font></p>
<% } %>
<p>SiebelユーザIDを入力してください</p>
<p>ユーザID:<input type="text" size="20" name="name"></p>
<input type="submit" name="submitValue" value="OK">
<%-- ページ名をHiddenで持ちます --%>
<input type="hidden" name="pageName" value="login">
</form>
</body>
</html>

ringo
会議室デビュー日: 2006/05/12
投稿数: 16
投稿日時: 2006-05-16 11:29
すみません。
やっぱりとんちんかんな事を言っていました。

Servletのソースに
request.setAttribute("bean", bean);
とある、コレのことだったんですね。

ここの第一引数が "bean" になっているから 取り出すときは"bean"と
しないといけなかった、ということだったんですね。
すみません。

ご教授ありがとうございました。
1

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