ExternalContext#redirect()不会重定向到父目录

时间:2013-02-25 15:32:07

标签: jsf redirect directory parent

我有两页:

String page1 = "user/newuser.jsf";
String page2 = "department/newdepartment.jsf";

如果我像这样重定向到page1

FacesContext.getCurrentInstance().getExternalContext().redirect(page1);

网址更改为localhost:8080/NavFile/user/newuser.jsf

在此页面上,我重定向到page2

FacesContext.getCurrentInstance().getExternalContext().redirect(page2);

网址更改为localhost:8080/NavFile/user/department/newdepartment.jsf。但是我的应用程序中没有user/department目录。我的目标是重定向到localhost:8080/NavFile/department/newdepartment.jsf

这是如何引起的?如何解决?

2 个答案:

答案 0 :(得分:13)

相对重定向网址(即不以/或方案开头)是相对于当前请求网址(如最终用户在浏览器的地址栏中看到的)。它不是神奇地相对于服务器端的上下文路径,因为这些信息在客户端是完全未知的(你知道,重定向是由webbrowser执行的,而不是由webserver执行的。)

如果要相对于上下文路径重定向,则应包括上下文路径,以使其成为域相关。您可以通过ExternalContext#getRequestContextPath()动态获取上下文路径。

ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
ec.redirect(ec.getRequestContextPath() + "/" + page1);

如果是page2,则完整重定向网址会变为/user/department/newdepartment.jsf,而前导斜杠/会使其相对于域http://localhost:8080,这正是您想要的

另见:

答案 1 :(得分:-1)

您可以这样做:

String redirectTo =“ ../department/newdepartment.jsf”; FacesContext.getCurrentInstance()。getExternalContext()。redirect(redirectTo);

对我有用。