0

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

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

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

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

4

1 回答 1

0

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

输入组件在流程验证阶段(生命周期的第三个阶段)immediate=false执行验证和转换,而输入组件在应用请求值阶段(生命周期的第二个阶段)执行验证和转换。immediate=true

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

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

于 2012-07-17T10:32:41.510 回答