この質問は、私が最近投稿した別の質問に関連しています:JSFのHttpServletRequestとCookieについて。
でRememberMeログインを実装するためにJSF
、Cookieを使用してを読み込んでいWebFilter
ます。フィルタはCookieを取得し、Cookieの値をに設定しますSessionScoped
ManagedBean
が、何らかの理由でManagedBean
Webページに表示できません。
フィルタのdoFilter実装:
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
Cookie[] cookies = req.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
if (cookie.getName().equals("MyTestCookie")) {
System.out.println("Filter got cookie: " + cookie.getValue());
cookieBean.setValue(cookie.getValue());
}
}
}
chain.doFilter(request, response);
}
CookieBeanクラス:
@ManagedBean
@SessionScoped
public class CookieBean implements Serializable {
private String value;
@PostConstruct
public void init() {
System.out.println("Instantiated CookieBean");
}
public String getValue() {
System.out.println("CookieBean returning Value: " + value);
return value;
}
public void setValue(String value) {
System.out.println("CookieBean getting Value: " + value);
this.value = value;
}
public void create() {
ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
Map<String, Object> props = new HashMap<String, Object>();
props.put("maxAge", 10000);
ec.addResponseCookie("MyTestCookie", "Hello Cookie", props);
}
}
CookieBean
cookieBean
javax.inject.Inject
注釈によってフィルターに注入されます。
index.xhtmlの本文:
<h:form>
<h:commandButton value="Create Cookie!" action="#{cookieBean.create()}" >
<f:ajax render="@form" />
</h:commandButton>
<p></p>
<h:outputText value="Cookie value: #{cookieBean.value}" />
</h:form>
最初の問題は、Cookieを設定した後、(新しいブラウザセッションを開いて)新しいセッションを開始すると、ページが表示された後SessionScoped
ManagedBean
に更新されるため、WebページがCookieの値を認識しないことです。
質問1rendered
: Webページの属性を更新するのに間に合うようにCookie値を検出するにはどうすればよいですか?
2番目の問題は、ブラウザのリロード(または更新)ボタンを押してWebページをリロードすると、ManagedBeanインスタンスは以前と同じですが(@PostConstruct
メソッドは起動されません)、WebページにnullCookieが表示されることです。値と同じものがサーバーの出力に表示されます。
CookieBean returning Value: null
Filter got cookie: Hello Cookie
CookieBean getting Value: Hello Cookie
質問2SessionScoped
ManagedBean
:再作成せずに損失がそのプロパティを失う可能性はどのようにありますか?