【问题标题】:JSF Multiple Partial Validations ScenarioJSF 多部分验证方案
【发布时间】:2010-09-30 23:56:57
【问题描述】:

在 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]                                      |
+------------------------------------------------------------+

如果所有字段都是下拉菜单,并且按下 [更新 C] 按钮只会使 A、B 和 C 生效,而不会验证其余字段,则按下 [更新 D] 按钮只会导致字段 B、C 和 D 生效验证并按下 [Submit All] 按钮将导致所有字段验证。

【问题讨论】:

    标签: java validation forms jsf partial


    【解决方案1】:

    从技术上讲,是的,可以使用验证器/立即执行此操作。但是,它不会特别简单。

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

    更好的方法是在绑定了所有控件的托管 bean 中执行验证逻辑。您可以将验证逻辑放在按钮绑定的任何方法中。使用 [Submit All] 按钮将您的验证数据保存在您的数据库/持久性存储/其他中。

    【讨论】:

    • 这主要是我的想法。只是这样做,您会丢弃整个验证层。这部分 JSF 很烂。
    • 验证器用于确保控件上输入数据的正确性。使用它们来阻止用户代理提交格式错误/超出范围的数据。这是验证 API 旨在做的唯一事情。 C'est la vie。
    • 重点是,有时您可以在一个表单上执行多个操作,而您甚至不使用某些数据。为这些字段激活验证器可能会导致它们向当前用户操作抛出不相关的错误。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-17
      • 1970-01-01
      • 2011-04-28
      • 1970-01-01
      • 1970-01-01
      • 2011-08-26
      • 1970-01-01
      相关资源
      最近更新 更多