7

我有两页:

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.

这是如何引起的,我该如何解决?

4

2 回答 2

14

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

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

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

如果是page2,则完整的重定向 URL 变为/user/department/newdepartment.jsf并且前导斜杠/将使其相对于 domain http://localhost:8080,这正是您想要的。

也可以看看:

于 2013-02-25T15:39:33.857 回答
-1

你可以这样做:

String redirectTo = "../department/newdepartment.jsf"; FacesContext.getCurrentInstance().getExternalContext().redirect(redirectTo);

这个对我有用。

于 2020-12-02T08:02:22.923 回答