在“RESTORE_VIEW”阶段运行的阶段监听器类中,我有一些这样的代码:
public void afterPhase(PhaseEvent event) {
FacesContext fc = event.getFacesContext();
NavigationHandler nh = fc.getApplication().getNavigationHandler();
nh.handleNavigation(fc, null, "/a/specific/path/to/a/resource.jspx");
}
导航到新 URL 在这里不起作用。发出的请求只会收到来自导航到的原始 JSPX 的响应。
像这样的代码工作正常:
public void afterPhase(PhaseEvent event) {
FacesContext fc = event.getFacesContext();
NavigationHandler nh = fc.getApplication().getNavigationHandler();
nh.handleNavigation(fc, null, "OUTCOME_DEFINED_IN_FACES_CONFIG_XML");
}
另外,第一个代码片段可以与 IceFaces Faces 提供程序一起使用,但不能与我需要使用的 Sun JSF 1.2 一起使用。我可以做些什么来修复代码,以便转发到特定的 URL 吗?
最佳答案
使用ExternalContext#dispatch()
反而。
或者,如果它应该是一个重定向,使用 ExternalContext#redirect()
.
它在 IceFaces 中工作一定是一个错误或特定于 impl 的“功能”。这不是什么NavigationHandler
API 契约定义。
关于jsf - 为什么 NavigationHandler.handleNavigation() 不转发到 View ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2569425/