同じ/類似のトピックについては、そこに多くの類似の質問がありますが、私は問題に解決策を適用できませんでした。richinsエラーページリダイレクトとgatein、jboss 5.1.0 gaポートレットブリッジjarsと私の間違い
ポートレット・ページのレンダリング中に例外が検出されると、ユーザーをカスタム・エラー・ページにリダイレクトする必要があります。 ページのレンダリング中に例外がスローされるのはなぜですか?バックグラウンドでは、ユーザーにいくつかの有益な情報を提供するために投げ捨てるので、いつでもすぐに変更するつもりはないので、私の意図はそうすることです。
私は例を挙げればいいと思っています: これは単純なポートレットで、私はその名前についての情報を得るために ">>"ボタンを押します。その前の実装では、絵..
セカンド写真:
を使用すると、レイアウトが正しいか見ることができるように「」(これは、それが見えた方法です)エラー ページは、単純に、ポートレットのコンテンツのwiを置き換えています というユーザーについての情報を取得できなかった理由を示すエラーメッセージが表示されます。ここまでは順調ですね。
は今、問題のケースを見てみましょう:私たちは、5.1.0 GAにはjboss 4.2.3 GAからアップグレードした、今GateInは、プレイグラウンドに出ます。また、ポートレットのこのビューを作成するために使用された古いジャーがありましたが、現在はすべて新しいポートレットにアップグレードされています。 ような:
(org.richfaces.framework) Richfaces-api 3.3.3-final,
(org.richfaces.framework) Richfaces-impl 3.3.3-final,
(org.richfaces.framework) Richfaces-ui 3.3.3-final,
(com.sun.faces) jsf-api 2.2.14,
(com.sun.faces) jsf-impl 2.2.14,
(javax-servlet) servlet-api 2.5,
(javax-servlet) jstl 1.2
Gatein version: 3.4
とgatein自体はJSR168互換ジャー+我々はJSF 1.2バージョンを使用しているが(タグバージョンで使用されている)を使用します。
問題ケース: わかるように、いくつかのユーザー情報を取得したいポートレットは、ドメインの詳細なポートレットに壊れて結合されています。スープのように見える。
この混乱を生成するコードも、私たちのものです。一度は正しく動作していましたが、現在はレイアウト全体が何とか破壊されています。
私はあなたのビューをレンダリングしているコードを表示してみましょう:コードのこの部分で
public void renderView(FacesContext context, UIViewRoot viewToRender) throws java.io.IOException, javax.faces.FacesException{
try {
super.renderView(context, viewToRender);
}catch(FacesException e){
Application application = context.getApplication();
ViewHandler viewhandler = application.getViewHandler();
PortletRequest request = (PortletRequest)context.getExternalContext().getRequest();
PortletConfig config = (PortletConfig)request.getAttribute(PortletConstants.PORTLET_CONFIG);
String errorView = config.getInitParameter(PortletConstants.PORTLET_FACES_ERROR_VIEW);
if(errorView == null || errorView.matches("")){
errorView = ProvPortletViewHandler.DEFAULT_FACES_ERROR_VIEW;
}
Throwable cause = e.getCause();
FacesMessage fm= findProvisioningException(cause);
if(fm == null)
{
request.setAttribute("ErrorMessage", "Unknown Error occured");
}
else
{
request.setAttribute("ErrorMessage", fm.getSummary());
}
viewToRender = viewhandler.createView(context,errorView);
context.setViewRoot(viewToRender);
viewhandler.renderView(context, viewToRender);
PortletSession objSes = (PortletSession)context.getExternalContext().getSession(false);
objSes.invalidate();
}
}
、あなたがsuper.renderView(context, viewToRender);
があることがわかりますそれはすべての道を行きますサービスに呼び出し、サービスコールを行います。サービスコールは、このユーザがDBに情報を持っていないという例外を返します。この例外は道路上のFacesExceptionに変換されます(私たちはそれをやっています)。
問題は例外ではなく、FacesExceptionに変換することもありません。
問題は、この一環として、これまで私たちがデバッグとして
viewToRender = viewhandler.createView(context,errorView);
context.setViewRoot(viewToRender);
viewhandler.renderView(context, viewToRender);
で発生します。何らかの理由で、例外のために部分的にレンダリングされた古いビューをエラービューに置き換えることはできません。
しかし、それが以前に動作していた場合はどうすればよいでしょうか。私たちはコードのこの部分を変更していません。
この情報は、この問題について考えてもらえますか? 詳細をお知りになりたいですか? ここで間違っていると思いますか?
深い見た後おかげ&に関して