如何在操作方法期间更新的 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()"/>

eventReizedEventResizeBehavior 调用,它从 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) + ")");