嗨,我在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先做更新再重定向?
希望你能帮助我, 提前谢谢
答案 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.
}