在处理AJAXified JSF 2.0组件时,是否应该立即使用immediate =“true”?

时间:2012-05-08 16:11:21

标签: ajax jsf jsf-2 immediate-attribute

在处理AJAXified JSF 2.0组件时,是否永远不会使用immediate="true"

示例可能是:

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

1 个答案:

答案 0 :(得分:11)

事实上,在取消按钮上使用immediate="true"的目的已经变得无用,因为<f:ajax>你可以设置为execute="@this"(已经是默认值)跳过处理所有输入组件都采用相同的形式。

您可能只会在事先提交表单但由于转换/验证失败而失败时遇到问题。如果您通过ajax点击取消按钮并在此后渲染表单,则输入仍然会被标记为无效,并且模型值中的任何更改都不会反映出来(您可能正在使用取消操作方法执行entity = new Entity();或其他操作清除表格的旧价值)。使用immediate="true"的同步(非ajax)请求时不会发生此问题。这个问题实际上与immediate="true"无关,而是与ajax请求的JSF生命周期无关。您基本上需要通过在未包含在ajax execute中的组件上调用EditableValueHolder#resetValue()来重置所涉及的输入组件的无效状态,但是包含在ajax render中。 OmniFaces正好有ResetInputAjaxActionListener