web-dev-qa-db-ja.com

JSFでCookieを使用する方法

JSF1.2セッションスコープBean上にJSFフォームがあります。セッションを無効にする「リセット」ボタンがあります。

Cookieを使用して、セッション間のセッション番号(JSFセッションではなく、プライベートセッション番号)を記憶しようとしましたが、失敗しました。私の質問-Cookieを初期化、取得、および保存するための正しい場所(一部のリスナー?Beanコンストラクター?)はどこにありますか。

これを行うための最良の方法を探しています。

ありがとう!

20
Ben

ExternalContext#getRequestCookieMap() ですべてのCookieを取得できます

_Map<String, Object> cookies = externalContext.getRequestCookieMap();
// ...
_

サーブレットAPI上でJSFを実行すると(99.9%の場合に当てはまります;))、マップ値は _javax.servlet.http.Cookie_ に解決されます。

_Cookie cookie = (Cookie) cookies.get(name);
// ...
_

JSF2.0で導入された ExternalContext#addResponseCookie() メソッドがないJSF1.2では、 ExternalContext#getResponse()HttpServletResponseにキャストする必要があります。 (もちろんサーブレットAPI上でJSFを実行している場合のみ)そして HttpServletResponse#addCookie() を使用します。

_HttpServletResponse response = (HttpServletResponse) externalContext.getResponse();
Cookie cookie = new Cookie(name, value);
cookie.setMaxAge(maxAge); // Expire time. -1 = by end of current session, 0 = immediately expire it, otherwise just the lifetime in seconds.
response.addCookie(cookie);
_

これは、必要なJSFコンテキストのどこでも実行できます。適切な場所は、唯一の機能要件によって異なります。応答がすでにコミットされている場合にのみCookieを追加しないようにする必要があります。そうしないと、 IllegalStateException になります。

34
BalusC