10

immediate="true"处理 AJAXified JSF 2.0 组件时不应该使用吗?

这个例子可能是:

如果我想在 JSF 2.0 页面上实现一个“取消”按钮,如果用户点击“取消”,则不应该运行任何验证,immediate="true"如果它是一个 ajaxified 组件,我应该在组件上设置,还是应该指定表单上的任何组件都不应该被处理?如果是这样,使用组件的 AJAXified 特性而不是使用“旧方式”来实现此功能的方法是immediate="true"什么?

4

1 回答 1

13

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

当表单已经预先提交但由于转换/验证失败而失败时,您可能只会遇到问题。如果您通过 ajax 点击取消按钮并在其后呈现表单,输入仍将被标记为无效,并且模型值的任何更改都不会反映(您可能正在entity = new Entity();取消操作方法中执行或某些操作以清除旧值的形式)。使用带有immediate="true". immediate="true"这个问题其实和 ajax 请求的 JSF 生命周期无关。您基本上需要通过调用EditableValueHolder#resetValue()未包含在 ajaxexecute中但包含在 ajax中的组件来重置相关输入组件的无效状态renderOmniFaces正是为了ResetInputAjaxActionListener这个目的。

于 2012-05-08T16:36:02.923 回答