ビュー スコープの JSF マネージド Bean が 1 つあります。このマネージド Beanのアクション リスナー メソッドでは<p:commandButton>
、次のように別のページにリダイレクトしています。
public void register() {
ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
Flash flash = context.getFlash();
flash.setKeepMessages(true);
flash.put("emailId", emailId);
context.redirect(((HttpServletRequest) context.getRequest()).getContextPath()+"/page.jsf");
}
page.jsf
次のように、フラッシュスコープに保存された電子メールアドレスを受信しているリクエストスコープのBeanにバインドされています。
<ui:define name="metaData">
<f:metadata>
<f:viewAction action="#{requestScopedBean.init}"/>
</f:metadata>
</ui:define>
public void init() {
String emailId = (String) FacesContext.getCurrentInstance().getExternalContext().getFlash().get("emailId");
System.out.println("emailId = "+emailId);
}
電子メール アドレスがターゲット Bean で使用できません。ターゲット Bean の電子メール アドレスは、電子メール アドレスを確認できるように、そのアドレスにメッセージが送信されたことを登録したユーザーに示すためにのみ必要です。
サーバー端末で次の警告が生成されます。
警告: JSF1095: フラッシュの送信 Cookie を設定しようとした時点で、応答は既にコミットされていました。フラッシュに保存された値は、次のリクエストでは使用できません。
なぜこれが起こるのですか?私の Mojarra バージョンは 2.2.7 です