2

JSF facelet のロード中にエラーが発生すると、JSF はエラーの時点でページのレンダリングを停止し、代わりにエラー ページを表示します (デフォルトの動作)。代わりに JSF にページのレンダリングを継続させ、ページ内に例外/エラーを表示させたい。たとえば、ページが例外をスローする「ポートレット」をロードしている場合、その例外はポートレット内のテキストとして表示されます。ページ全体を別のエラー ページに転送したくありません。

私は自分自身ExceptionHandlerFactoryExceptionHandler実装を初期化し、正常に繰り返すことができましたExceptionQueueEvents。ただし、エラーにもかかわらずページのロードを続行するように JSF に指示する方法がわかりません。これはまったく正しいアプローチですか?ExceptionHandler は、(私が推測するように) 後に呼び出されますか、または facelet の処理中に呼び出されますか? その後、私の中でできることはありますExceptionHandlerか?

私は私がすべきことを知っています:

  • ユーザーがアクセスできない部分を非表示にします(私の特定のケースは、ユーザーが権限を持たないコンテンツを読み込もうとしたときのセキュリティに関連しています。ただし、これに対するグローバルな回答を探しています)
  • エラーを手動で処理して、予期しない例外がスローされないようにする

ただし、一部のコンポーネントに小さな障害が発生した場合でも、ユーザーが引き続きシステムを使用できるようにしたいと考えています (たとえば、一部のニュースフィード ポートレットがエラーをスローした場合、ユーザーが他のコンテンツを表示して使用することを妨げてはなりません)。

Mojarra 2.0.2 を使用しています。これは非常に簡単に解決できると思いますが、理解できません:(

4

2 に答える 2

2

ページに別のコンテンツがある場合は、(i) フレームの使用を検討してください。このようにして、特定のコンテンツの読み込みに失敗した場合でも、ページ全体がレンダリングされますが、そのフレームにはエラー ページが表示されます。もちろん、これはすべての個別のコンポーネントが完全な html ページであることを意味します。

BalusCは絶対に正しく、解析例外などを処理しようとすべきではありません。奇妙にレンダリングされたページ セグメントはユーザー フレンドリーではなく、非常に奇妙な結果につながる可能性があります。

ロール/権限の問題がある場合、それらのシナリオは jsf レンダリングとは別に維持する必要があります。承認は、ページをレンダリングしようとしている間ではなく、ページに転送するに確認する必要があります。

于 2010-07-09T12:40:27.137 に答える
1

そうすることは、エンドユーザーに中途半端な HTML ページを提供することを意味し (JSF が HTML レンダリングを完了していない (そして完了できないため)) 、Web ブラウザーがページをどのように表示するかは指定されていません。

やらないでください。

于 2010-07-09T11:18:14.667 に答える