的ExternalContext#重定向()不重定向到父目录(ExternalContext#red

2019-07-20 11:50发布

我有两个页面:

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

这是怎么造成的,我该怎么解决呢?

Answer 1:

的相对重定向URL(即,当未开始/或方案)是相对于当前请求URL(如终端用户在浏览器的地址栏看到)。 因为这些信息在客户端完全不知道(你知道,一个重定向是由web浏览器执行的,而不是由Web服务器)这不是奇迹般地相对于服务器端的上下文路径。

如果你想相对于上下文路径重定向,那么你应该包括上下文路径,使之成为域相对。 您可以通过动态获取上下文路径ExternalContext#getRequestContextPath()

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

在的情况下, page2 ,全重定向URL成为/user/department/newdepartment.jsf和斜线/将使其相对于域http://localhost:8080 ,这是你想要什么。

也可以看看:

  • 什么URL中使用链接/导航到其他JSF页面
  • 重定向到JSF外部URL
  • 击中bean方法和重定向上的GET请求
  • 如何在JSF导航? 如何使URL反映当前页面(而不是以前的一个)


文章来源: ExternalContext#redirect() does not redirect to parent directory