处理 AJAX 化的 JSF 2.0 组件时,是否永不使用 immediate="true"?

10

当处理一个已经用AJAX化的JSF 2.0组件时,是否应该永远不使用immediate="true"

举个例子:

如果我想在JSF 2.0页面上实现一个"取消"按钮,当用户点击"取消"时,不会运行任何验证,那么如果这是一个ajaxified组件,我应该在组件上设置immediate="true"还是指定表单上没有任何组件被处理?如果需要,在不使用immediate="true"的旧方式下,如何使用组件的AJAX功能实现这种功能?

1个回答

13

在取消按钮上使用immediate="true"的目的已经变得无用,因为您可以使用<f:ajax>,只需将其设置为execute="@this"(这已经是默认值),以跳过同一表单中所有输入组件的处理。

当表单已经被提交但由于转换/验证失败而失败时,您可能会遇到问题。如果通过ajax点击取消按钮并在此之后呈现表单,则输入仍将标记为无效,并且模型值中的任何更改都不会反映出来(您可能正在做entity = new Entity();或类似的事情以清除表单的旧值)。使用同步(非ajax)请求和immediate="true"时不会出现此问题。实际上,这个问题与immediate="true"无关,而与ajax请求的JSF生命周期有关。您基本上需要通过调用EditableValueHolder#resetValue()来重置未包含在ajax execute中但包含在ajax render中的组件的无效状态。对于这个目的,OmniFaces提供了一个ResetInputAjaxActionListener


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接