私はアプリケーションを開発していますが、通常、実行時例外 (null ポインター例外など) が発生するポートレットは、(ページのレンダリング/リロード時に) 「ポートレットが一時的に無効になっています」というメッセージが表示された小さなボックスに置き換えられます。しかし、どういうわけか、私のアプリケーションはキャッチされていないエラーで失敗するのではなく、何も問題がなかったかのようにページをレンダリングします (巨大なスタック トレースをコンソールに吐き出します)。なぜこれが悪いのか疑問に思うかもしれません。
NullPointerException
特定の入力フィールドが空の場合に、ボタン アクション メソッドでエラーが発生しました。さらに、このアクション メソッドで、いくつかの情報が DB に挿入されました。Web フォームは静かに失敗したため、ボタンをさらに数回押しました。次に、入力フィールドにデータを入力し、もう一度ボタンを押しました。これで、アクション ハンドラー メソッドは をスローしNullPointerException
なくなりました。
ただし、ハンドラー メソッドは 6 回実行されました (失敗した送信ごとに 1 回 + 1 回)。明らかに、ActionEvent
NullPointerException になった s はアクション キューから削除されず、後続の要求で再起動されました。アプリケーションが想定どおりに無効になった場合、これは問題ではありません。
誰でもこれで私を助けることができますか?ポートレットがキャッチされない例外で再び失敗するようにするか、何らかの方法で、各レンダー レスポンス フェーズの後で Faces イベント キューをクリアする必要があります。