- ベストアンサー
core:setでセットした値をサーブレットで取得
こんにちは。 JSP内で <core:set var="変数" value="値" scope="request" />した「変数」を JSPからリクエストされたサーブレットで取得したいとき request.getAttribute("変数"); ではダメなのですか!? 宜しくお願いします
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
最初に断っておきますが、JSTLについては詳しいことを知りません。 この質問を見てから調べて、試しただけですので、間違っているかもしれません。 それを踏まえて読んで下さい。 m(_ _)m JSPは実はServletなんです。 JSPが最初に呼ばれたときにページコンパイルされて、その結果としてhtmlが出力されます。 ですので、JSP内に <core:set var="変数" value="値" scope"request" /> とスコープをリクエストにしてしまうと、 JSP表示リクエスト ↓ (コンパイルされてなければコンパイル) ここでリクエストにセットされる ↓ HTMLがレスポンスとして返される ここで、すでにリクエストのレスポンスが返されているので ↓ サーブレットを呼ぶ(新しいリクエスト) ↓ サーブレットでrequest.getAttribute("変数")としても新しいリクエストにはセットされていないのでnullが返ってきます。 <core:set>でセットした値を(上記のようなケースで)Servletで取得したいとなるとスコープをsessionにしないとダメだと思います。
その他の回答 (1)
<core:set>って、JSTLのCoreタグライブラリにあるsetのことですね? これで設定したものは、その変数スコープにあるgetAttribute/setAttributeでアクセスできるはずですよ。ですから、基本的な考え方としては間違っていないはずです。 例えば、同じ変数をSessionスコープで利用したらどうなるでしょう? また、JSP内でELを使い、${requestScope.××}などとして変数出力させたらどうなりますか? そのあたり、「他のスコープではどうか」「他のやり方で変数にアクセスしたらどうか」ということを確かめてみたら、何かの手がかりになるかも知れません。
お礼
テストしてみました。 確かにJSP内でsessionスコープにセットした変数は サーブレットでそのgetAttributeで取得できました。 JSP内でrequestスコープにセットした変数は サーブレットではnullになりました。 JSPがコンパイルするときにHTMLをリクエストするのですね 勉強になりました。 ありがとうございました!!