我从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;
导航工作得很好,但事实证明,脸部消息不再显示了。这是怎么造成的,如何解决这个问题?
答案 0 :(得分:2)
Faces消息是请求范围的。它们被添加到当前请求中。重定向指示浏览器在给定的URL上创建全新 GET请求。该新请求与当前请求不同。该新请求根本不包含那些面部消息。
您有两个选择:
不要重定向。您可能也没有在原始导航案例中重定向。
if (result == 1) {
return "DatacentersList.xhtml";
}
if (result == 2) {
return "NewDatacenter.xhtml";
}
Keep闪存范围内的消息。只要进行一次重定向,闪存范围就会有效。
context.getExternalContext().getFlash().setKeepMessages(true);
请注意,较旧的Mojarra版本存在一些与此相关的特殊错误。例如,重定向到另一个文件夹仍会导致其失败。确保你至少使用Mojarra 2.1.14版以确保你不会被这些错误所困扰(目前已经是2.1.20)。