由于第二次重定向导致Primefaces消息丢失

时间:2017-10-31 09:47:09

标签: jsf primefaces jsf-2

访问页面时(让我们调用页面 create_object.jsf ), preRenderView 会在我的Bean中调用init方法。在Bean的init方法中,我希望立即重定向到另一个页面,同时显示一条消息。

以下是我的代码。

public void initMyObject(){
    if(condition...){
        ExternalContext externalContext = context.getExternalContext();
        context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"My personal message", StringUtils.EMPTY));
        externalContext.getFlash().setKeepMessages(true);
        externalContext.redirect(new StringBuilder(externalContext.getRequestContextPath())
                .append("/overview.jsf?faces-redirect=true").toString());
        return;
    }
}

我希望显示消息的我的jsf页面包含以下组件。

<p:messages id="messages" autoUpdate="true" />

这确实会将我重定向到概述页面,但不会显示任何消息。另一方面,当加载 create_object.jsf 并按下commandButton以在overview.jsf上重定向并显示消息时,这确实有效。注意,我在这种情况下使用与重定向方法中的bove相同的代码。所以我的猜测是,由于在加载create_object.jsf之前它被重定向到另一个页面,因此消息丢失了。

注意:我刚刚确认,当我在页面 create_object.jsf 时,使用commandButton调用一个将我重定向到 overview.jsf <的方法/ strong>在上下文中同时添加消息时,消息确实出现在 overview.jsf 上。

现在,在另一种情况下,当尝试访问 create_object.jsf 页面时,页面会调用initMyObject,它会自动将我重定向到 overview.jsf 页面。在上下文中添加消息。在这种情况下,消息不会显示在 overview.jsf 上。

0 个答案:

没有答案