【问题标题】:Update of a datatable after progressbar completes进度条完成后更新数据表
【发布时间】:2013-04-22 14:07:09
【问题描述】:

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

【问题讨论】:

    标签: jsf-2 primefaces


    【解决方案1】:

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

    <p:progressBar ajax="true" value="#{progressBean.progress}">  
        <p:ajax event="complete" listener="#{...}" update="myDataTable"/>  
    </p:progressBar>  
    

    【讨论】:

    • 你如何以编程方式做到这一点?
    • 您应该调试并检查列表是否正在填充​​span>
    【解决方案2】:

    正如 PrimeFaces 展示的那样,您应该使用 &lt;p:progressBar&gt; 和嵌套在其中的 &lt;p:ajax&gt; 标签。您可以在&lt;p:ajax&gt;update 属性 中指定要重新呈现的组件ID,并在oncomplete 属性 中指定客户端回调,方法是将省略号替换为如下代码:

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

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


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

    AjaxBehavior ab = new AjaxBehavior();
    ab.setUpdate("table-id");
    ab.setOncomplete("refreshTable()");
    component.addClientBehavior("complete", ab);
    

    【讨论】:

    • progressbar 是在运行时创建的,所以...我如何以编程方式在创建进度条的支持 bean 中执行此操作
    • 如果某些东西不起作用,请发布控制台消息并跟踪到不起作用的点。
    • 没有错误但表格没有更新,您有什么建议?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-30
    • 2019-09-14
    • 1970-01-01
    • 1970-01-01
    • 2011-07-27
    相关资源
    最近更新 更多