ExternalContext#redirect () не перенаправляет в родительский каталог

у меня две страницы:

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

если я перенаправляю на page1 такой:

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

URL изменяется на localhost:8080/NavFile/user/newuser.jsf.

на этой странице я перенаправляю на page2:

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

URL изменяется на localhost:8080/NavFile/user/department/newdepartment.jsf. Но нет в моем приложении. Моей целью было перенаправить на localhost:8080/NavFile/department/newdepartment.jsf.

как это вызвано и как я могу решить это?

1 ответов


относительный URL перенаправления (т. е., когда не начинается с / или scheme) относительно текущего URL-адреса запроса (как видит пользователь в адресной строке браузера). Это не волшебно относительно пути контекста на стороне сервера, поскольку эта информация полностью неизвестна на стороне клиента (вы знаете, перенаправление выполняется веб-браузером, а не веб-сервером).

если вы хотите перенаправить относительно пути контекста, то вы должны включить путь контекста так, чтобы он становится домен-относительным. Вы можете получить контекстный путь динамически через ExternalContext#getRequestContextPath().

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

в случае page2, полный URL перенаправления становится /user/department/newdepartment.jsf и ведущий Слэш / сделает это относительно домена http://localhost:8080, а это именно то, что вы хотите.

Читайте также: