0

我想在进度条完成后触发 JavaScipt 函数。我试图嵌套以下标签:

<p:ajax event="complete" oncomplete="refreshTable();"/>

我还尝试通过支持 bean 添加进度条组件,如下面的代码所示:

ProgressBar progressBar = new ProgressBar();
progressBar.setAjax(true);
AjaxBehavior ajaxAction = new AjaxBehavior();
ajaxAction.setOncomplete("refreshTable();");
progressBar.addClientBehavior("complete", ajaxAction);

但最终没有调用 JS 函数。

我怎样才能实现这个功能?

使用的技术:PrimeFaces 3.5、Mojarra 2.1.6 (SNAPSHOT 20111206)、PrimeFaces Extensions 0.6.3、GlassFish 3.1.2.2

4

2 回答 2

0

您应该使用更新属性。如果您的 dataTable id 是 id="myDataTable" 那么您应该使用:

<p:progressBar ajax="true" value="#{progressBean.progress}">  
    <p:ajax event="complete" listener="#{...}" update="myDataTable"/>  
</p:progressBar>  
于 2013-04-22T14:19:58.943 回答
0

正如 PrimeFaces 展示的那样,您应该使用嵌套在其中的<p:progressBar>with标签。通过替换代码中的省略号,您可以在 的属性<p:ajax>中指定要在属性重新呈现的组件 IDupdate客户端回调:oncomplete<p:ajax>

<p:progressBar ajax="true" value="#{bean.progressVar}">
    <p:ajax event="complete" update="..." oncomplete="..."/>  
</p:progressBar>  

请注意,您可能更喜欢通过指定属性由 JSF 重新呈现数据表update,而不是通过指定属性在客户端上手动执行某些工作oncomplete。后者通常用于触发一些客户端 GUI 更改,例如显示/隐藏组件、切换样式类、打开对话框等,但不执行属于服务器端功能的操作。


关于以编程方式向组件添加 ajax 行为,您<p:ajax event="complete" update="table-id" oncomplete="refreshTable()"/>应该以编程方式等效于:

AjaxBehavior ab = new AjaxBehavior();
ab.setUpdate("table-id");
ab.setOncomplete("refreshTable()");
component.addClientBehavior("complete", ab);
于 2013-04-22T14:32:10.373 回答