我试图将请求转发到JSF页面:
request.getRequestDispatcher(redirectURI).forward(request, response);
proc.xhtml
下有pages
。
如果我设置:
redirectURI = "pages/proc.xhtml";
它工作正常。
但是,如果我使用包含上下文路径的绝对URL:
redirectURI = "/context/pages/proc.xhtml";
它不起作用并给我这个例外:
com.sun.faces.context.FacesFileNotFoundException: /context/pages/proc.xhtml Not Found in ExternalContext as a Resource.
(是的,我已将Faces servlet URL模式设置为*.xhtml
)
答案 0 :(得分:6)
RequestDispatcher#forward()
采用相对于上下文根的路径。所以,基本上你正试图转向显然不存在的/context/context/pages/proc.xhtml
。如果要使其绝对相对于上下文根而不是当前请求URI,则需要/pages/proc.xhtml
。
redirectURI = "/pages/proc.xhtml";
或者,在此上下文中,奇怪的变量名称redirectURI
表示,如果您实际打算触发真实重定向(从而反映网址更改)在浏览器的地址栏中),那么您应该使用HttpServletResponse#sendRedirect()
而不是确实采用相对于当前请求URI的路径(因此,当您想要以/
开头时,应该包括上下文路径)
redirectURI = request.getContextPath() + "/pages/proc.xhtml";
response.sendRedirect(redirectURI);
否则,最好将该变量重命名为forwardURI
左右。