マネージド Bean のコンストラクターから別のページ/ビューに移動することは可能ですか? 例外が発生した場合は、このリダイレクトが必要です。私は多くの方法を試しました:
トライ-1:
getFacesContext().responseComplete();
getFacesContext().getApplication().getNavigationHandler().handleNavigation(getFacesContext(), null, "gotoPartError");
getFacesContext().renderResponse();
試行-2:
getServletResponse().sendRedirect("partError.jspx")
トライ-3:
getFacesContext().responseComplete();
getFacesContext().getExternalContext().redirect(getServletRequest().getContextPath() + "/pages/partError.jspx");
トライ-4:
RequestDispatcher dispatcher = getServletRequest().getRequestDispatcher("partError.jspx");
dispatcher.forward(getServletRequest(), getServletResponse());
トライ-5:
FacesContext context = getFacesContext();
UIViewRoot newPage = context.getApplication().getViewHandler().createView(context, "/partError.jspx");
context.setViewRoot(newPage);
context.renderResponse();
トライ-6:
ControllerContext.getInstance().getCurrentViewPort().setViewId("partError");
トライ-7:
Exception Handler in adfc-config.xml
トライ-8:
Custom service handler defined in /.adf/META-INF/services/oracle.adf.view.rich.context.Exceptionhandler which extends oracle.adf.view.rich.context.Exceptionhandler
トライ-9:
By extending JSF Life Cycle
それらのどれも機能しませんでした。私が受け取ったすべてのケースについて
java.lang.IllegalStateException: Cannot forward after response has been committed
JSF 1.2では本当に不可能ですか? JSF 1.2を使用するADF 11.1.1.6.0を使用しているため、上記の「試行」の一部にはADF Facesの方法が含まれています。
とにかく、エラーページに移動するには、JSF 1.2またはADF Facesが必要です。私が成功した唯一の方法は、バックエンドから実行された javascript を使用して、エラーの場合にウィンドウでエラーページを開くこと_self
ですが、私はそれがあまり好きではありません。
この問題に関するポインタは非常に役立ちます。