JSF1.2セッションスコープBean上にJSFフォームがあります。セッションを無効にする「リセット」ボタンがあります。
Cookieを使用して、セッション間のセッション番号(JSFセッションではなく、プライベートセッション番号)を記憶しようとしましたが、失敗しました。私の質問-Cookieを初期化、取得、および保存するための正しい場所(一部のリスナー?Beanコンストラクター?)はどこにありますか。
これを行うための最良の方法を探しています。
ありがとう!
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
になります。