JSF多部分验证方案

时间:2009-01-12 19:09:37

标签: java validation forms jsf partial

在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验证并按[全部提交]按钮将导致所有字段验证。

2 个答案:

答案 0 :(得分:1)

从技术上讲,是的,可以使用validators / immediate执行此操作。但是,这并不是特别简单。

如果添加验证器, [使用A和B更新C] 中的逻辑仅在所有验证器通过或其立即属性已设置为true时运行。如果其immediate属性已设置为true,则按钮逻辑无法使用getValue或组件绑定的任何对象读取提交的组件值;它必须使用getSubmittedValue(一个坏主意)。

更好的方法是在所有控件绑定的托管bean中执行验证逻辑。您可以将验证逻辑放在按钮绑定的任何方法中。使用 [提交全部] 按钮将经过验证的数据保存在数据库/持久性存储中/等等。

答案 1 :(得分:0)

我通常使用Ajax做类似的事情,我会将感兴趣的部分提交给服务器,在那里验证/处理,并将结果返回到页面。另一方面,它完全绕过了JSF及其验证机制,所以我猜它并不是最聪明/最优的解决方案......