访问页面时(让我们调用页面 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 上。