3

我有一个视图范围的 JSF 托管 bean。在这个托管 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,我在其中接收存储在 flash 范围中的电子邮件地址,如下所示。

<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:在我们尝试为 flash 设置传出 cookie 时,响应已经提交。存储到闪存中的任何值在下一次请求时都将不可用。

为什么会这样?我的 Mojarra 版本是 2.2.7

4

0 回答 0