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

当PrimeFaces命令按钮上的ajax属性为false时,如何在重定向后保留JSF消息,ajax,primefaces,jsf-2,Ajax,Primefaces,Jsf 2,在JSF页面中,验证消息显示正确,但它突然消失。当primefaces命令按钮上的ajax属性设置为false时,就会发生这种情况 下面是JSF managedBean中的操作方法 FacesContext context = FacesContext.getCurrentInstance(); context.getExternalContext().getFlash().setKeepMessages(true); context.addMessage(null, new

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

下面是JSF managedBean中的操作方法

  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"/>

即使在重定向之后,我如何保留消息?

您可以通过将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);
    }
}
尝试使用普通的h:commandButton?这样行吗?