7

私は2つのページを持っています:

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。しかしuser/department、私のアプリケーションにはディレクトリがありません。私の目標はにリダイレクトすることでしたlocalhost:8080/NavFile/department/newdepartment.jsf

これはどのように発生し、どうすれば解決できますか?

4

2 に答える 2

14

相対リダイレクト URL (つまり、またはスキームで始まっていない場合/) は、現在の要求 URL に対して相対的です (エンドユーザーがブラウザーのアドレス バーに表示されるように)。この情報はクライアント側では完全に不明であるため、サーバー側のコンテキストパスに対して魔法のように相対的ではありません (リダイレクトは Web サーバーではなく Web ブラウザーによって実行されます)。

コンテキスト パスを基準にしてリダイレクトする場合は、コンテキスト パスを含めて、ドメイン相対になるようにする必要があります。を介してコンテキスト パスを動的に取得できます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 に答える