在处理AJAXified JSF 2.0组件时,是否永远不会使用immediate="true"
?
示例可能是:
如果我想在JSF 2.0页面上实现“取消”按钮,如果用户点击“取消”,则不应运行任何验证,如果组件是ajaxified组件,或者应该在组件上设置immediate="true"
指定不应处理表单上的任何组件?如果是这样,使用组件的AJAXified功能实现此功能的方法是什么,而不是使用immediate="true"
的“旧方式”?
答案 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
。