无法使用带有上下文路径的URL转发到JSF页面

时间:2013-07-23 06:34:33

标签: jsf servlets

我试图将请求转发到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

1 个答案:

答案 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左右。

另见: