如何在PrimeFaces中使用EL完成属性,该属性在动作方法期间更新

时间:2015-05-12 11:58:23

标签: jsf primefaces jsf-2 el

这是代码:

 <p:ajax event="eventResized" process="@this calendar"  listener="#{bean.eventResized}" oncomplete="resizeComplete()"/>
eventReized调用的{p> EventResizeBehaviorAjaxBehaviorEvent扩展而且包含一些属性。我可以在<p:ajax....>内查看其值并将结果传递给oncomplete="resizeComplete(result)"

像这样的东西

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

1 个答案:

答案 0 :(得分:7)

PrimeFaces不支持它。在{HTML}文档的呈现响应期间,不会在关联的ajax调用的未完成期间立即评估oncomplete属性中的任何EL表达式。基本上,oncomplete属性生成的JavaScript代码包含页面加载期间的旧值。

您最好的选择是使用RequestContext#addCallbackParam()将属性添加到args范围内的PrimeFaces特定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) + ")");