【问题标题】:How to use EL in PrimeFaces oncomplete attribute which is updated during action method如何在 PrimeFaces oncomplete 属性中使用 EL,该属性在操作方法期间更新
【发布时间】:2015-07-23 06:54:59
【问题描述】:

这是代码:

 <p:ajax event="eventResized" process="@this calendar"  listener="#{bean.eventResized}" oncomplete="resizeComplete()"/>

eventReizedEventResizeBehavior 调用,从 AjaxBehaviorEvent 扩展而来,它包含一些属性。我可以在&lt;p:ajax....&gt; 内部检查调用它的值并将结果传递给oncomplete="resizeComplete(result)"

类似的东西

<p:ajax event="eventResized" process="@this calendar"  listener="#{bean.eventResized}" oncomplete="resizeComplete(#{eventResized.id == 0})"/>

【问题讨论】:

    标签: jsf primefaces jsf-2 el


    【解决方案1】:

    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) + ")");
    

    【讨论】:

    • 谢谢BalusC,我怀疑我需要使用混合解决方案,但不知道如何像您的解决方案那样简单。
    • 不客气。我想指出,RichFaces 支持您直观期望的构造,如果 PrimeFaces 也这样做,那确实很好。
    • 如果您使用 Primefaces 版本 7+,您可以使用 PrimeFaces.current().executeScript("..."),有关详细信息,请参阅此线程stackoverflow.com/questions/55285566/…
    猜你喜欢
    • 2016-09-12
    • 1970-01-01
    • 2017-01-20
    • 1970-01-01
    • 2013-06-04
    • 2015-04-12
    • 1970-01-01
    • 2013-06-17
    • 1970-01-01
    相关资源
    最近更新 更多