JSF複数部分検証シナリオ
-
22-07-2019 - |
質問
JSFでは、JSFの検証フレームワーク(別名、バリデーター、即時、必須など)を使用して、次の検証/更新シナリオを解決できますか?
+-- Form ----------------------------------------------------+
| |
| Field A: |____________|v| |
| Field B: |____________|v| |
| Field C: |____________|v| Button: [Update C using A and B] |
| Field D: |____________|v| Button: [Update D using B and C] |
| |
| More Fields: ... |
| |
| Button : [Submit All] |
+------------------------------------------------------------+
すべてのフィールドがドロップダウンであり、[Update C]ボタンを押すとA、B、Cのみが検証され、残りは検証されない場合、[Update D]ボタンを押すとフィールドB、C、Dのみが検証して[すべて送信]ボタンを押すと、すべてのフィールドが検証されます。
解決
技術的には、はい、バリデーター/イミディエートでこれを行うことができます。ただし、それは特に単純ではありません。
バリデーターを追加する場合、すべてのバリデーターがパスするか、その属性がtrueに設定されている場合にのみ、 [AおよびBを使用してCを更新] のロジックが実行されます。即時属性がtrueに設定されている場合、ボタンロジックは getValue またはコンポーネントがバインドされているオブジェクト。 getSubmittedValueを使用する必要があります。 (悪いアイデア)。
より良いアプローチは、すべてのコントロールがバインドされているマネージドBeanで検証ロジックを実行することです。検証ロジックは、ボタンがバインドされているメソッドに配置できます。 [すべて送信] ボタンを使用して、検証済みのデータをデータベース/永続ストアなどに保存します。
他のヒント
私は通常、Ajaxで同様のことをしていたので、興味のある部分をサーバーに送信し、そこで検証/処理し、結果をページに返しました。一方、これはJSFの完全なバイパスであり、検証メカニズムであるため、実際には最も賢明で最適なソリューションではないと思います...
所属していません StackOverflow