在widgetVar.filter()真正完成并更新了p:datatable之后执行某些操作

时间:2017-01-26 15:53:27

标签: ajax primefaces datatable filtering

我有一个数据表(primefaces 4.0),我正在使用widgetVar在更新数据后应用重新过滤表。 我需要在doSomething()真正完成过滤表并更新它时才调用函数employeesDataTable_WV.filter();

在此链接中显示了工作filter的功能

https://searchcode.com/codesearch/view/2686053/

它似乎做了ajax请求而不是更新组件。

这是我的示例代码

<h:form id="form">

    <p:remoteCommand name="myRemote" actionListener="viewEmployeesManagedBean.refreshEmployees"
            update=":form:employeesDataTable" 
            oncomplete="employeesDataTable_WV.filter();doSomething();"/>

    <p:dataTable id="employeesDataTable"
        value="#{viewEmployeesManagedBean.employees}" var="employee" widgetVar="employeesDataTable_WV">
        [...]
    </p:dataTable>
    </h:form>

我需要在employeeDataTable_WV.filter()函数过滤和更新数据表后才调用doSomething函数。 我的所有测试都不起作用,并且在更新数据表之前总是调用doSomething函数。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您应该做的是向oncomplete添加一个ajax事件处理程序,并将p:remoteCommand放入过滤器事件的<p:ajax event="filter" oncomplete="doSomething()" /> 并将其从p:ajax中删除

filter()

如果您不希望/需要对服务器进行roundTrip,则可以将filter()替换为PrimeFaces Extensions pe:javascript

如果您只想在widgetVar上直接调用doSomething()时发生这种情况,只需在调用 <p:remoteCommand ... oncomplete="mySemaphore = true;employeesDataTable_WV.filter();"/> function doSomething() { if(mySemaphore == true;) { ... mySemaphore = false; } // just do nothing if called from editing in one of the filter fields } 之前直接设置信号量,然后检查Animation animation = AnimationUtils.loadAnimation(this, R.style.styleAnimationResourceEarned); 是否为 animation.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { //Dismiss it } @Override public void onAnimationRepeat(Animation animation) { } }); 集。

{{1}}

这应该适用于4.0,但也适用于当前(在回答时)6.1-SNAPSHOT(最有可能超出)的后续版本

另见