immediate="true"
处理 AJAXified JSF 2.0 组件时不应该使用吗?
这个例子可能是:
如果我想在 JSF 2.0 页面上实现一个“取消”按钮,如果用户点击“取消”,则不应该运行任何验证,immediate="true"
如果它是一个 ajaxified 组件,我应该在组件上设置,还是应该指定表单上的任何组件都不应该被处理?如果是这样,使用组件的 AJAXified 特性而不是使用“旧方式”来实现此功能的方法是immediate="true"
什么?
immediate="true"
处理 AJAXified JSF 2.0 组件时不应该使用吗?
这个例子可能是:
如果我想在 JSF 2.0 页面上实现一个“取消”按钮,如果用户点击“取消”,则不应该运行任何验证,immediate="true"
如果它是一个 ajaxified 组件,我应该在组件上设置,还是应该指定表单上的任何组件都不应该被处理?如果是这样,使用组件的 AJAXified 特性而不是使用“旧方式”来实现此功能的方法是immediate="true"
什么?
实际上,在immediate="true"
取消按钮上使用的目的已经变得毫无用处,因为<f:ajax>
您可以设置为execute="@this"
(这已经是默认设置)以跳过对同一表单中所有输入组件的处理。
当表单已经预先提交但由于转换/验证失败而失败时,您可能只会遇到问题。如果您通过 ajax 点击取消按钮并在其后呈现表单,输入仍将被标记为无效,并且模型值的任何更改都不会反映(您可能正在entity = new Entity();
取消操作方法中执行或某些操作以清除旧值的形式)。使用带有immediate="true"
. immediate="true"
这个问题其实和 ajax 请求的 JSF 生命周期无关。您基本上需要通过调用EditableValueHolder#resetValue()
未包含在 ajaxexecute
中但包含在 ajax中的组件来重置相关输入组件的无效状态render
。OmniFaces正是为了ResetInputAjaxActionListener
这个目的。