Как использовать p: growl Primefaces и перенаправить на страницу - PullRequest
12 голосов
/ 29 марта 2012

Привет, я новичок в среде jsf, я пытаюсь обновить рычание простых лиц, а затем перенаправить на страницу из действия commandButton.

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

Код управляемого компонента -

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

Это только перенаправление на страницу, но не показывает мне рычание, я проверил, что если изменить мой метод, чтобы не возвращать страницу, сообщение действительно показывает.

Я пытался обновить рычаниестраница, которую я перенаправляю, но это невозможно, я думаю.

Я думаю, что при перенаправлении я потерял функциональность обновления, потому что я сейчас на новой странице.

Есть ли способ сказать jsf сначала выполнитьобновить, а затем перенаправить?

Надеюсь, вы мне поможете, заранее спасибо

Ответы [ 3 ]

45 голосов
/ 30 марта 2012

Сообщения теряются при перенаправлении.Вы можете использовать флэш-память для хранения сообщений.

Добавьте следующее, прежде чем вернуться из метода действия:

FacesContext context = FacesContext.getCurrentInstance();
context.getExternalContext().getFlash().setKeepMessages(true);
1 голос
/ 08 июля 2014

Добавьте еще одно рычание на страницу, которую вы перенаправляете

как это <p:growl id="growlmsg2" showDetail="true" sticky="true" autoUpdate="true"/>

0 голосов
/ 25 ноября 2016

Поскольку во Flash есть ошибка, мое решение состоит в том, чтобы создать отдельную кнопку перенаправления, которая будет нажата после отображения сообщения:

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>

Bean:

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.
}
...