Jsf 将导航大小写替换为隐式导航后,将显示未显示的消息
我从Jsf 将导航大小写替换为隐式导航后,将显示未显示的消息,jsf,jsf-2,primefaces,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 "Datacenters
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;
导航运行得很好,但事实证明,faces消息不再显示。这是如何造成的,我如何解决这一问题?Faces消息是请求范围内的消息。它们将添加到当前请求中。重定向指示浏览器在给定URL上创建全新的获取请求。该新请求与当前请求不同。这个新请求根本不包含那些faces消息 您有两种选择:
if (result == 1) {
return "DatacentersList.xhtml";
}
if (result == 2) {
return "NewDatacenter.xhtml";
}
context.getExternalContext().getFlash().setKeepMessages(true);
请注意,较旧的Mojarra版本有一些与此相关的特殊bug。例如,重定向到其他文件夹仍会导致失败。确保您至少使用了Mojarra版本2.1.14,以确保您不会被这些bug所困扰(目前已经是2.1.20)请注意,执行转发还是重定向在功能上是一个相对巨大的差异,应该根据功能需求仔细决定。例如,您希望响应是幂等的/可书签的吗?当最终用户按F5刷新登录页时,您希望发生什么?或者当终端用户复制粘贴/书签当前URL(显示在浏览器的地址栏中)并重新打开它时?或者当最终用户通过浏览器历史导航回它时?这不是一个应该草率作出的决定。