0

我删除了导航案例faces-config.xml并切换到隐式导航。

FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage("Successful", "Datacenter " + ndc.componentStatsId + " is created!"));

if (result == 1)
{
    return "DatacentersList.xhtml?faces-redirect=true";
}

if (result == 2)
{
    return "NewDatacenter.xhtml?faces-redirect=true";
}
return null;

导航运行良好,但事实证明不再显示人脸消息。这是如何引起的,我该如何解决?

4

1 回答 1

2

Faces 消息是请求范围的。它们被添加到当前请求中。重定向指示浏览器在给定 URL 上创建全新的GET 请求。该新请求与当前请求不同。该新请求根本不包含那些面孔消息。

您有 2 个选项:

  1. 不要重定向。您可能也没有在原始导航案例中重定向。

    if (result == 1) {
        return "DatacentersList.xhtml";
    }
    
    if (result == 2) {
        return "NewDatacenter.xhtml";
    }
    
  2. 将消息保存在 Flash 范围内。Flash 作用域的有效寿命与单个重定向一样长。

    context.getExternalContext().getFlash().setKeepMessages(true);
    

    请注意,较旧的 Mojarra 版本有一些与此相关的特殊错误。例如重定向到不同的文件夹仍然会导致它失败。确保您至少使用 Mojarra 版本 2.1.14 以确保您不会被这些错误所困扰(它目前已经在 2.1.20)。

于 2013-03-19T19:33:08.803 回答