进度条完成后更新数据表

时间:2013-04-22 14:07:09

标签: jsf-2 primefaces

我想在进度条完成后触发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

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()"/>