【问题标题】:In what order are input fields validated?输入字段的验证顺序是什么?
【发布时间】:2012-10-17 12:08:10
【问题描述】:

在 JSF 验证阶段,输入字段的验证顺序是什么?

我想到的尝试如下:我有一组可能通过或失败转换/验证的输入字段。另外,我想使用自定义验证器进行一些输入,该验证器会根据所有其他字段是否通过验证而产生不同的结果。我可以检查 FacesContext 是否有任何以前的消息,但我必须确保在检查了所有其他字段之后调用此自定义转换器,因此上述问题。仅仅是它们在 Facelets-Page 中定义的顺序吗?如果是这样,这个订单会得到保证吗?

【问题讨论】:

    标签: validation jsf


    【解决方案1】:

    仅仅是它们在 Facelets-Page 中定义的顺序吗?

    基本上,是的。组件树将以“通常的方式”递归处理。对于每个组件,首先将处理组件本身,然后依次处理其每个子组件。


    如果是这样,这个订单能保证吗?

    是的。这在JSF 2.0 specification 中有说明:

    2.2.3 流程验证

    ...

    在请求处理生命周期的流程验证阶段,JSF 实现必须调用树的UIViewRootprocessValidators() 方法。这通常会导致树中每个组件的processValidators() 方法被递归地调用,如UIComponent.processValidators() 方法的API 参考中所述。

    ...

    因此,自定义转换器应由最后一个组件或“存根”<h:inputHidden> 组件所有所需组件之后引用。所需的组件可以通过组件绑定传递。另请参阅此相关答案:JSF doesn't support cross-field validation, is there a workaround?

    作为一种完全不同的选择,您可以考虑将整个事物包装在一个复合材料中。

    【讨论】:

    • 个人问题:你睡觉吗?有时,在另一个快于 2 分钟的响应之后,人们开始怀疑...... ;)
    • 关于您的编辑:如果我将它包装在复合组件中会发生什么?组件本身是否具有取决于其内容的无效状态? (PS:收到了你的一些评论的通知,但在这里看不到。你删除了吗?)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-24
    • 2015-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-03
    相关资源
    最近更新 更多