3

ビュー スコープの 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 です

4

0 に答える 0