通过隐式导航替换导航大小后面临消息未显示

时间:2013-03-19 19:08:30

标签: jsf jsf-2 primefaces

我从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;

导航工作得很好,但事实证明,脸部消息不再显示了。这是怎么造成的,如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

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

您有两个选择:

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

    if (result == 1) {
        return "DatacentersList.xhtml";
    }
    
    if (result == 2) {
        return "NewDatacenter.xhtml";
    }
    
  2. Keep闪存范围内的消息。只要进行一次重定向,闪存范围就会有效。

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

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