Как использовать Primefaces' p:growl и перенаправить на страницу
Привет, я новичок в среде 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 ответа
Сообщения теряются во время перенаправления. Вы можете использовать вспышку для хранения сообщений.
Добавьте следующее, прежде чем вернуться из метода действия:
FacesContext context = FacesContext.getCurrentInstance();
context.getExternalContext().getFlash().setKeepMessages(true);
Добавьте еще одно рычание на страницу, которую вы перенаправляете
как это<p:growl id="growlmsg2" showDetail="true" sticky="true" autoUpdate="true"/>
Поскольку во Flash есть ошибка, мое решение - создать отдельную кнопку перенаправления, которая будет нажата после отображения сообщения 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.
}