私のviewParamsのいくつかは必須であり、欠落している場合はFacesMessageが表示されます。ただし、システム イベント preRenderView は空の検索パラメータで実行されるため、デフォルトのデータ結果が返されます。必要な属性に違反したときに preRenderView 登録メソッドが実行されるのを防ぐ方法はありますか?
2 に答える
この<f:event type="preRenderView">構成では、本質的にハック/回避策です。その名前が示すように、タイプ リクエスト (ポストバックかどうか) と検証結果 (失敗かどうか) に関係なく、レンダリング レスポンス フェーズの前に常に呼び出されます。これは、この関連する質問でも詳しく説明されています: What can <f:metadata>, <f:viewParam> and <f:viewAction> can be used for? これには、さらに役立つ次のスニペットが含まれています。
public void init() {
FacesContext facesContext = FacesContext.getCurrentInstance();
if (!facesContext.isPostback() && !facesContext.isValidationFailed()) {
// ...
}
}
の代わりに目的のロジックを配置し// ...ます。
JSF 2.2 では、標準的なソリューションが のフレーバーで利用可能であり<f:viewAction>、前述の関連する質問にも示されています。
私はコードを見ていませんが、ドキュメントから、ビューから何かが構築される前にpreRenderView始まります。したがって、アプリケーションは、検証する必要があるビュー パラメーターがあることさえ知りません。
おそらく、イベント メソッドで必要な引数を確認するか、実際に必要と思われるJSF-2.2 の新しいf:viewActionを使用する必要があります。
Omnifaces を追加できる場合、または既に使用している場合は、 s が割り当てられた後に実行されるInvokeActionEventListenerがあります。<f:viewParam>
<f:event listener="#{bean.myListener()}" type="postInvokeAction" />