【问题标题】:separated validation of inputs in jsfjsf中输入的单独验证
【发布时间】:2012-07-14 21:45:21
【问题描述】:

我有一个rich:tabpanel 和几个标签。选项卡面板的类型设置为“客户端”。在每个选项卡中,都有一些 h:inputText。

我想做的是显示错误,例如“Tab: Tab1[,Tab2[,Tab3...]] 有错误,请在保存前更正错误。”如果所有选项卡之间有错误。我试图通过 AjaxListener(Seam) 或 PhaseListener 来实现这一点(两者都可以实现我想做的事情)。

问题在于,当有一些输入被标记为 immediate="true" 时,这些输入首先被验证,并且与那些带有 immediate="false" 的输入分开。除非那些“即时”输入不包含错误,否则“非即时”输入将不会被验证。

有没有办法强制 jsf 验证器验证某个命令按钮上的所有输入?或者有什么方法可以覆盖 jsf 的默认验证器?

【问题讨论】:

    标签: validation jsf seam tabpanel


    【解决方案1】:

    JSF 中没有“默认验证器”,每个组件都负责自己的转换和验证(如果有)。组件具有在JSF lifecycle 的每个阶段调用的回调,这些回调为组件树中的每个组件调用验证和转换逻辑(因此没有集中式转换器或验证器)。

    带有immediate=false 的输入组件在Process Validations 阶段(生命周期的第三个阶段)执行验证和转换,而带有immediate=true 的输入组件在应用请求值中执行此操作 阶段(生命周期中的第二个阶段)。

    JSF 生命周期的一个“问题”(实际上是设计约束)是,每当在任何阶段发现错误时,框架都会直接​​跳转到 Render Response 阶段,而不执行剩余的阶段阶段,因此如果在immediate=true 输入(第二阶段)中发现任何错误,则永远不会调用第三阶段。

    没有解决方法,您需要将所有输入设为immediate=falseimmediate=true,以便所有验证都在同一阶段进行。我建议坚持使用immediate=false,除非您有充分的理由不这样做。例如,如果您需要执行某个操作而不管输入的验证状态如何,请将 commandButton 设为 immediate=true

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-14
      相关资源
      最近更新 更多