- - PR -
JSP内でのBeanの扱いについて
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2004-11-04 11:09
こんにちは。tony-xと申します。
JSP内でのBeanの扱いについて質問します。 下記のコードと出力結果を示します。 --------------------- コード --------------------- <%@ page contentType="text/html; charset=Shift_JIS" import="bean.*" %> <jsp:useBean id="dataBean" scope="session" class="bean.DataBean" /> <jsp:useBean id="dataListBean" scope="session" class="bean.DataListBean" /> <html> <body> <%-- 1.DataBeanを設定 --%> <% dataBean = dataListBean.getDataBean(); %> <%-- 2.プロパティを設定 --%> <% dataBean.setTitle("setTitle"); %> <jsp:setProperty name="dataBean" property="title" value="jsp:setProperty" /> <%-- 3.プロパティを取得 --%> 「jsp:getProperty」による出力⇒ <jsp:getProperty name="dataBean" property="title" /> <br> 「dataBean.getTitle()」による出力⇒ <%= dataBean.getTitle() %> </body> </html> -------------------------------------------------- --------------------- 出力 ----------------------- 「jsp:getProperty」による出力⇒jsp:setProperty 「dataBean.getTitle()」による出力⇒setTitle -------------------------------------------------- <jsp:getProperty>による出力と <%= %>による出力で結果が異なりました。 双方ともdataBeanという変数名を使用しているのですが、 なぜこのような現象が起こるのでしょうか? (<jsp:xxxProperty>と<%= %>で別のインスタンスを指している?) ちなみに <%-- 1.DataBeanを設定 --%> <% dataBean = dataListBean.getDataBean(); %> の部分を削除すると、下記のような結果になります。 --------------------- 出力 ----------------------- 「jsp:getProperty」による出力⇒jsp:setProperty 「dataBean.getTitle()」による出力⇒jsp:setProperty -------------------------------------------------- 以上、よろしくお願いします。 |
|
投稿日時: 2004-11-04 11:44
>(<jsp:xxxProperty>と<%= %>で別のインスタンスを指している?)
そうなのだと思います。 JSPコンテナが生成するJAVAソースコードを見るのが早いのでは? 動作としては<jsp:xxxProperty>でアクセスするオブジェクトは <jsp:useBean id="dataBean" scope="session" class="bean.DataBean" /> で 生成されたオブジェクトで、 <%= %>でアクセスするオブジェクトは <% dataBean = dataListBean.getDataBean(); %> で dataListBean.getDataBean()が返すオブジェクトのようですね。 これが、JSP仕様なのか、コンテナの実装依存なのかはわかりませんが・・・ ご存じの方がいらっしゃいましたがフォローお願いします。 |
|
投稿日時: 2004-11-04 17:19
>T2さん
回答ありがとうございます。 >JSPコンテナが生成するJAVAソースコードを見るのが早いのでは? 生成されたソースを見ると、 <jsp:useBean id="dataBean" scope="session" class="bean.DataBean" /> で変数dataBeanが生成されたDataBeanオブジェクトを参照し、 <% dataBean.setTitle("setTitle"); %> 等の<%,<%=内の処理は、 JSP内と同様に変数dataBeanで処理を行い、 <jsp:setProperty name="dataBean" property="title" value="jsp:setProperty" />等の<jsp:xxxProperty>では org.apache.jasper.runtime.JspRuntimeLibrary.introspecthelper(_jspx_page_context.findAttribute("dataBean"), "title", "jsp:setProperty", null, null, false); といった感じで、直接変数を指定しないで処理していました。 おそらく、直接変数を指定しない方では、変数dataBeanとは違うインスタンスを参照しているのでしょうね。 少々すっきりしませんが、そのようなものであると認識することにします。 ありがとうございました。 |
1