如何使用Primefaces的p:growl并重定向到页面

时间:2012-03-29 19:50:43

标签: jsf redirect primefaces growl

嗨,我在jsf环境中的新功能,我试图更新一个primefaces咆哮,然后从commandButton动作重定向到一个页面。

 <p:commandButton value="Guardar"  action="#{AgendamientoMBean.procesaAgendamientoJ()}" 
 update="growlDetalle" />  

托管bean编码

   FacesContext context = FacesContext.getCurrentInstance();
   context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, descripcion, detalle));
   ....
   ....
    return "agp_bandeja_citas_llamadas?faces-redirect=true";

这只是重定向到页面,但没有显示我的咆哮消息,我测试了如果改变我的方法不返回消息确实显示的页面..

我试图更新我重定向的页面的咆哮但我猜不可能。

我认为当重定向时我失去了更新功能,因为我现在正在新页面中。

有没有办法告诉jsf先做更新再重定向?

希望你能帮助我, 提前谢谢

3 个答案:

答案 0 :(得分:45)

重定向期间邮件丢失。您可以使用闪光灯来保存信息。

在从操作方法返回之前添加以下内容:

FacesContext context = FacesContext.getCurrentInstance();
context.getExternalContext().getFlash().setKeepMessages(true);

答案 1 :(得分:1)

将另一个咆哮添加到您重定向的页面

像这样 <p:growl id="growlmsg2" showDetail="true" sticky="true" autoUpdate="true"/>

答案 2 :(得分:0)

因为Flash有bug,我的解决方案是制作一个单独的重定向按钮,在显示msg后会被点击:

HTML:

<h:form prependId="false">
    <p:growl />
    <p:button outcome="gotoABC" id="rdr-btn" style="display: none;" />
    <p:commandButton action="#{bean.process()}" update="@form" />
</form>

豆:

public void process(){
    addInfoMsg(summary, msgDetail); //Add msg func
    RequestContext.getCurrentInstance().execute("setTimeout(function(){ $('#rdr-btn').click(); }, 3000);"); // 3 seconds delay. I put the script in Constants to config later.
}