我想在进度条完成后触发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 。
答案 0 :(得分:0)
您应该使用update属性。如果您的dataTable id是id =“myDataTable”,那么您应该使用:
<p:progressBar ajax="true" value="#{progressBean.progress}">
<p:ajax event="complete" listener="#{...}" update="myDataTable"/>
</p:progressBar>
答案 1 :(得分:0)
由于PrimeFaces清楚地展示了状态,因此您应该使用嵌套在其中的<p:progressBar>
<p:ajax>
标记。您指定要在update
属性中重新呈现组件ID,并在oncomplete
的{{1}}属性中指定客户端回调,方法是将其替换为代码中的省略号:
<p:ajax>
请注意,您可能更喜欢通过指定<p:progressBar ajax="true" value="#{bean.progressVar}">
<p:ajax event="complete" update="..." oncomplete="..."/>
</p:progressBar>
属性而不是通过指定update
属性在客户端上手动执行某项作业来通过JSF重新呈现数据表。后者通常用于触发一些客户端GUI更改,如显示/隐藏组件,切换样式类,打开对话框等,但不执行属于服务器端功能的操作。
关于将ajax行为以编程方式添加到组件,您的oncomplete
应该在编程上等同于:
<p:ajax event="complete" update="table-id" oncomplete="refreshTable()"/>