如果在PrimeFaces命令按钮上ajax属性为false时重定向后如何保留JSF消息

时间:2014-10-29 07:40:29

标签: ajax primefaces jsf-2

在JSF页面中,验证消息正确显示,但突然消失。当在primefaces命令按钮上将ajax属性设置为false时,会发生这种情况。

以下是JSF managedBean中的action方法

  FacesContext context = FacesContext.getCurrentInstance();
    context.getExternalContext().getFlash().setKeepMessages(true);
    context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "error.nozipfile", null));
    return response().redirectPage(WEB_PAGE_LIST);

primefaces命令按钮

<p:commandButton
          value="#{lang.save}"
          onclick="PF('importDialog').hide();
          PF('ajaxStatusDialog').show();"
          action="#{zcmsContentController.actionImport}"
          update="@this"
          ajax="false"
          process="@this"              
          styleClass="right-button"/>

如何在重定向后保留消息?

1 个答案:

答案 0 :(得分:2)

您可以通过在会话范围中放置faces消息来执行此操作,并在另一页的页面加载时检查是否有消息是需要显示的会话。像这样的东西

List<FacesMessage> messages = new ArrayList<FacesMessage>();
messages.add(new FacesMessage(FacesMessage.SEVERITY_INFO, "error.nozipfile", null));
HttpSession session = (HttpSession) context.getExternalContext().getSession(false);
session.put("facesMessages", messages);

在加载其他页面的方法

if (session.get("facesMessages") != null) {
    List<FacesMessage> messages = (List<FacesMessage>)session.get("facesMessages");
    for (FacesMessage message : messages) {
        context.addMessage(null, message);
    }
}