2012-02-21 15 views
0

ユーザーが最初にアクセスしたときにJSPでセッションデータを取得する際に問題が発生しました。Struts2/Springアプリケーションの最初のアクセス時にJSPでセッション変数が空になる

私は、Strutsアクションでいくつかの「プロファイル」で満たされたセッションスコープBean「コンテキスト」を持っています。 URLは、Spring Securityの匿名ユーザーに許可されるように設定されています。

ページへの最初のアクセスでは、セッションは自分のアクションで正しく初期化されますが、strutsタグで使用すると空とみなされます。

私はJSPでJavaコードを使用すると、私はセッションが正しいことを確認できます。

<% System.out.println(((my.bean.SessionBean)session.getAttribute("context")).getProfiles()); %> => OK !! 

session: <s:property value="%{#session}"/> => KO (empty) 

session: ${session} => KO (empty) 

結果は、Strutsタグが私のjspで「プロファイル」のリストを取得するために失敗するということです。

ページを更新すると正常に動作します。最初のアクセス時にセッションが初期化された場合にのみ失敗します。私はStrutsのデバッグモードでチェックしましたが、セッション変数は最初は空({})です。

最初のアクセス時に追加のStrutsアクションにリダイレクトすると、問題が解決します。しかし、この解決策は私にとっては理想的ではありません。

誰もが問題の考えを持っていますか? Strutsが空のセッションを取得するのはなぜですか?

<%@ page session="false"%> 

セッション属性が「偽」である、あなたがアクセスすることはできません。

おかげ

答えて

0

HAVA一度同様の問題、および有罪は私達がすべて私達のJSPでいたpageディレクティブましたJSPページからのセッションオブジェクト、またはセッションスコープ内の任意のBean。

+0

残念ながら私はこの指示文を私のJSPに入れていません – Samuel

0

私はOGNLについてはわかりませんが、あなたのJavaコード行に相当するJSP EL式は${session}ではありません。これは、「セッション」というページ/リクエスト/セッション/アプリケーション属性を探し

${sessionScope.context.profiles} 

${session}です。

+0

あなたは正しいです、$ {sessionScope.context.profiles}は最初のアクセスから正しく動作します。しかし、私のStrutsタグでは、 "%{#session}"()で動作し、その場合は "sessionScope"は機能しません。私は、属性 "セッション"がStrutsによって利用可能になったと思います。 – Samuel

+0

http://struts.apache.org/2.0.14/docs/ognl-basics.htmlを読むと、その式は '#session.context.profiles'と思われます。 http://struts.apache.org/2.0.14/docs/jsp.htmlを読むと、タグは ''になります。 –

+0

助けてくれてありがとう。構文は、ページの更新時に機能するため、正しいです。私の問題は、セッション変数が最初の呼び出しで空であることです。は、値。以前のStrutsアプリケーションでこの問題が発生したことはありません。 – Samuel

関連する問題