我绝望地尝试编写一个在RESTORE_VIEW之前运行的JSF阶段监听器,它根据登录状态,永久登录状态,请求视图等转发到不同的页面......这有点复杂但是很容易所有这些都没有,以下任何一个转发正确:
这个似乎只有在faces-config中还有一个导航案例才能起作用,因为它最终会出现" ...没有找到导航案例......"
String path = "/user/login.xhtml";
FacesContext context = event.getFacesContext(); // PhaseEvent event;
context.getApplication().getNavigationHandler().handleNavigation(context, null, path);
以下内容相同:
context.getExternalContext().dispatch(path);
在最后一个中,getViewRoot()始终返回null:
context.getViewRoot().setViewId(path);
那么如何在不定义导航案例的情况下转发?
事实证明重定向有效:
String requestUrlString = ((HttpServletRequest)(FacesContext.getCurrentInstance().getExternalContext().getRequest())).getRequestURL().toString();
URL requestUrl = new URL(requestUrlString);
String linkUrlString = requestUrl.getProtocol() + ":" + "//"
+ requestUrl.getHost() + ":" + requestUrl.getPort()
+ context.getExternalContext().getApplicationContextPath() + "/faces" + path + ".xhtml";
context.getExternalContext().redirect(linkUrlString);
答案 0 :(得分:0)
试试这个:
FacesContext ctx = FacesContext.getCurrentInstance();
ctx.getExternalContext().redirect(outcome);
ctx.responseComplete();