2012-03-30 23 views
2

Java EE WebアプリケーションのFreeMarkerテンプレートから、sessionID(つまりHttpSession.getId())にアクセスする必要があります。要するに、外部アナリティクスプロバイダに渡されているため、ユーザーが閲覧セッション中に行ったことに関するレポートを作成できます。Java HttpSession IDはFreeMarkerテンプレートに表示されますか?

明らかに、FreeMarkerに渡されるモデルオブジェクトにセッションIDを追加するだけです。しかし、このアプリケーションはちょっと混乱しています... FreeMarkerテンプレートは、さまざまなモデルオブジェクトを渡す複数のコントローラで使用できます。メンテナンス性のために、FreeMakerテンプレートからすべてのモデルクラスを変更せずにセッションIDにアクセスできるだけであれば、はるかに簡単です。

FreeMarker documentationは「application」、「session」、「request」のスコープを参照しています。しかし、この形式は値を返しません:

${Session.id} 

は、私は、(getId()など)HttpSessionオブジェクトのすべてのgetterメソッドが含まれていません「スコープ属性」...ではなく、することができ、単にそれらの値を疑いますHttpSession.getAttribute()から取得しました。

モデルオブジェクトを明示的に渡すことなく、FreeMarkerテンプレートからJava EEセッションIDに簡単にアクセスできますか?

+0

私は現在FreeMarker 2.3.19とSpring MVCで作業しており、セッション属性はすでにテンプレートで利用可能です。このSpring MVCに固有のものかどうかは不明です。 – arahant

答えて

2

テンプレートをレンダリングする前にモデルに配置することができます。

通常、すべてのテンプレートをレンダリングするときに呼び出されるいくつかの基本メソッドで、requestオブジェクトをモデルに配置できます。そうすれば、すべてのテンプレートにリクエストが送られます。次に、要求オブジェクトを介してセッションにアクセスします。それが私たちがやったことで、うまくいきます。

+0

Err ...ええ、しかし、2番目の段落は、私が可能ならば、そのアプローチを避けようとしている理由を説明しています。 –

+0

私の答えを延長させてください – Bozho

+0

コントローラーとモデルの再組み立てが終わったので、すべてのFreeMarkerテンプレートに常に1つの共通の属性セットが渡されます。私はそれらの属性の1つとしてサーブレットセッションIDを設定します。どうやら、FreeMarkerのドキュメントは誤解を招いています...私が最初に尋ねたことは不可能です。 –

関連する問題