2

私はアプリケーションを開発していますが、通常、実行時例外 (null ポインター例外など) が発生するポートレットは、(ページのレンダリング/リロード時に) 「ポートレットが一時的に無効になっています」というメッセージが表示された小さなボックスに置き換えられます。しかし、どういうわけか、私のアプリケーションはキャッチされていないエラーで失敗するのではなく、何も問題がなかったかのようにページをレンダリングします (巨大なスタック トレースをコンソールに吐き出します)。なぜこれが悪いのか疑問に思うかもしれません。

NullPointerException特定の入力フィールドが空の場合に、ボタン アクション メソッドでエラーが発生しました。さらに、このアクション メソッドで、いくつかの情報が DB に挿入されました。Web フォームは静かに失敗したため、ボタンをさらに数回押しました。次に、入力フィールドにデータを入力し、もう一度ボタンを押しました。これで、アクション ハンドラー メソッドは をスローしNullPointerExceptionなくなりました。

ただし、ハンドラー メソッドは 6 回実行されました (失敗した送信ごとに 1 回 + 1 回)。明らかに、ActionEventNullPointerException になった s はアクション キューから削除されず、後続の要求で再起動されました。アプリケーションが想定どおりに無効になった場合、これは問題ではありません。

誰でもこれで私を助けることができますか?ポートレットがキャッチされない例外で再び失敗するようにするか、何らかの方法で、各レンダー レスポンス フェーズの後で Faces イベント キューをクリアする必要があります。

4

1 に答える 1

0
  1. NPEが実際に発生する場所にブレークポイントを設定します。
  2. サーバーをデバッグモードで起動します。
  3. サーバーがブレークポイントで停止したら、スタックを調べて、呼び出しのチェーンを確認します。何かがNPEを「飲み込んでいる」可能性があります。

このようなことは通常、カスタム設計されたポートレット開発フレームワークに対して開発するときに発生します。そのフレームワークの設計上の欠陥は、アクションの不適切な例外処理につながる可能性があります。私は以前にそのようなカスタムフレームワークを見たことがあります。

于 2012-09-23T14:41:51.573 に答える