4

プロジェクトで JSF 2.0 と Primefaces を使用しています。

Cars.xhtml と Bikes.xhtml という 2 つの xhtml ページがあります。

ViewScoped バッキング Bean を使用しています。

現在、2つのページのいずれかからビューの期限切れの例外を取得した場合、web.xmlで処理しています。error-page タグを使用して、welcome.xhtml に誘導します。

ここで、Bikes.xhtml から viewexpired 例外が発生した場合は、welcome.xhtml ではなく BikesHome.xhtml である別のページに移動する必要があります。

例外が Cars.xhtml からのものである場合、welcome.xhtml が表示されます。

やり方を教えてください。

4

1 に答える 1

9

これについては 100% 確信が持てませんが (自分で試したことがないため)、ここに私の提案を示します。

if (t instanceof ViewExpiredException) {
    ViewExpiredException vee = (ViewExpiredException) t;

この時点で、次のように取得できview idます-

vee.getViewId();

そしてそれに基づいてview id、目的のナビゲーションを行います。

NavigationHandler nh = facesContext.getApplication().getNavigationHandler();
//check condition, set view       
nv.handleNavigation(facesContext, null, "/view-id?faces-redirect=true");
facesContext.renderResponse();

または、あなたもできると思います-

FacesContext.getExternalContext().redirect(url);
FacesContext.responseComplete();

リダイレクトします。

于 2011-09-27T18:19:01.277 に答える