在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验证并按[全部提交]按钮将导致所有字段验证。
答案 0 :(得分:1)
从技术上讲,是的,可以使用validators / immediate执行此操作。但是,这并不是特别简单。
如果添加验证器, [使用A和B更新C] 中的逻辑仅在所有验证器通过或其立即属性已设置为true时运行。如果其immediate属性已设置为true,则按钮逻辑无法使用getValue或组件绑定的任何对象读取提交的组件值;它必须使用getSubmittedValue(一个坏主意)。
更好的方法是在所有控件绑定的托管bean中执行验证逻辑。您可以将验证逻辑放在按钮绑定的任何方法中。使用 [提交全部] 按钮将经过验证的数据保存在数据库/持久性存储中/等等。
答案 1 :(得分:0)
我通常使用Ajax做类似的事情,我会将感兴趣的部分提交给服务器,在那里验证/处理,并将结果返回到页面。另一方面,它完全绕过了JSF及其验证机制,所以我猜它并不是最聪明/最优的解决方案......