我有两页:
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
。
这是如何引起的?如何解决?
答案 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);
对我有用。