1

私のviewParamsのいくつかは必須であり、欠落している場合はFacesMessageが表示されます。ただし、システム イベント preRenderView は空の検索パラメータで実行されるため、デフォルトのデータ結果が返されます。必要な属性に違反したときに preRenderView 登録メソッドが実行されるのを防ぐ方法はありますか?

4

2 に答える 2

3

この<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>、前述の関連する質問にも示されています。

于 2014-01-21T14:56:04.823 に答える
1

私はコードを見ていませんが、ドキュメントから、ビューから何かが構築される前にpreRenderView始まります。したがって、アプリケーションは、検証する必要があるビュー パラメーターがあることさえ知りません。

おそらく、イベント メソッドで必要な引数を確認する、実際に必要と思われるJSF-2.2 の新しいf:viewActionを使用する必要があります。

Omnifaces を追加できる場合、または既に使用している場合は、 s が割り当てられた後に実行されるInvokeActionEventListenerがあります。<f:viewParam>

<f:event listener="#{bean.myListener()}" type="postInvokeAction" />
于 2014-01-21T13:36:18.630 に答える