实际上,在
immediate="true"取消按钮上使用的目的已变得毫无用处,因为
<f:ajax>您可以将
execute="@this"其设置为(已经是默认设置)以跳过对同一形式的所有输入组件的处理。
仅当表单已经预先提交但由于转换/验证失败而失败时,您才可能遇到问题。如果您通过ajax按下“取消”按钮并在此后呈现表单,则输入仍将被标记为无效,并且模型值的任何更改都不会反映出来(您可能正在使用“
entity = newEntity();取消操作”方法或执行某种操作以清除旧值)的形式)。与一起使用同步(非ajax)请求时,不会发生此问题
immediate="true"。这个问题实际上与无关
immediate="true",而是与ajax请求的JSF生命周期有关。基本上,您需要通过调用
EditablevalueHolder#resetValue()未包含在ajax
execute中但包含在ajax中的组件来重置所涉及的输入组件的无效状态
render。OmniFaces有
ResetInputAjaxActionListener出于这样的目的。



