如何在操作方法期间更新的 PrimeFaces oncomplete 属性中使用 EL
How to use EL in PrimeFaces oncomplete attribute which is updated during action method
这是代码:
<p:ajax event="eventResized" process="@this calendar" listener="#{bean.eventResized}" oncomplete="resizeComplete()"/>
eventReized
由 EventResizeBehavior
调用,它从 AjaxBehaviorEvent
扩展而来,它包含一些 属性。我可以检查内部 <p:ajax....>
调用它的值并将结果传递给 oncomplete="resizeComplete(result)"
类似的东西
<p:ajax event="eventResized" process="@this calendar" listener="#{bean.eventResized}" oncomplete="resizeComplete(#{eventResized.id == 0})"/>
PrimeFaces 不支持。 oncomplete
属性中的任何 EL 表达式都会在该 HTML 文档的呈现响应期间立即求值,而不是在关联的 ajax 调用的 oncomplete 期间求值。基本上,由 oncomplete
属性生成的 JavaScript 代码包含页面加载期间的旧值。
您最好的选择是使用 RequestContext#addCallbackParam()
将 属性 添加到 PrimeFaces 特定的 args
对象,该对象在 oncomplete
范围内可用。
RequestContext.getCurrentInstance().addCallbackParam("result", eventResized.getId() == 0);
<p:ajax ... oncomplete="resizeComplete(args.result)" />
另一种方法是使用 RequestContext#execute()
而不是 oncomplete
以编程方式指示 PrimeFaces 在完成 ajax 请求后执行一段 JavaScript。
RequestContext.getCurrentInstance().execute("resizeComplete(" + (eventResized.getId() == 0) + ")");
这是代码:
<p:ajax event="eventResized" process="@this calendar" listener="#{bean.eventResized}" oncomplete="resizeComplete()"/>
eventReized
由 EventResizeBehavior
调用,它从 AjaxBehaviorEvent
扩展而来,它包含一些 属性。我可以检查内部 <p:ajax....>
调用它的值并将结果传递给 oncomplete="resizeComplete(result)"
类似的东西
<p:ajax event="eventResized" process="@this calendar" listener="#{bean.eventResized}" oncomplete="resizeComplete(#{eventResized.id == 0})"/>
PrimeFaces 不支持。 oncomplete
属性中的任何 EL 表达式都会在该 HTML 文档的呈现响应期间立即求值,而不是在关联的 ajax 调用的 oncomplete 期间求值。基本上,由 oncomplete
属性生成的 JavaScript 代码包含页面加载期间的旧值。
您最好的选择是使用 RequestContext#addCallbackParam()
将 属性 添加到 PrimeFaces 特定的 args
对象,该对象在 oncomplete
范围内可用。
RequestContext.getCurrentInstance().addCallbackParam("result", eventResized.getId() == 0);
<p:ajax ... oncomplete="resizeComplete(args.result)" />
另一种方法是使用 RequestContext#execute()
而不是 oncomplete
以编程方式指示 PrimeFaces 在完成 ajax 请求后执行一段 JavaScript。
RequestContext.getCurrentInstance().execute("resizeComplete(" + (eventResized.getId() == 0) + ")");