【问题标题】:Do something after widgetVar.filter() is really completed and has updated p:datatable在 widgetVar.filter() 真正完成并更新 p:datatable 之后做一些事情
【发布时间】:2017-06-12 03:55:19
【问题描述】:

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

在此链接中显示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>

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

非常感谢您的帮助。

【问题讨论】:

    标签: ajax primefaces datatable filtering


    【解决方案1】:

    你应该做的是在p:dataTable中添加一个ajax事件处理程序,并将doSomething()放在过滤事件的oncomplete中,并从p:remoteCommand中删除。

    <p:ajax event="filter" oncomplete="doSomething()" />
    

    如果您不想/不需要往返服务器,可以将 p:ajax 替换为 PrimeFaces 扩展 pe:javascript

    如果您只希望在 widgetVar 上直接调用 filter() 时发生这种情况,只需在调用 filter() 之前直接设置一个信号量,并检查 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
    }
    

    这应该适用于 4.0,但也适用于当前(在回答时)6.1-SNAPSHOT(很可能超过)的更高版本

    另请参阅

    【讨论】:

    • 抱歉,但在这种方式下,用户在&lt;p:column filterBy="#{employee.employeeName}" headerText="employeeId" footerText="contains" filterMatchMode="contains"&gt; &lt;f:facet name="header"&gt; &lt;h:outputText value="Employee Name"&gt;&lt;/h:outputText&gt; &lt;/f:facet&gt; &lt;h:outputText value="#{employee.employeeName}"&gt;&lt;/h:outputText&gt; &lt;/p:column&gt; 列的过滤器上输入内容的那一刻也被捕获,这是真的还是我错了?我不想要这种行为
    • 正确,这就是你的意思吗?然后在employeesDataTable_WV.filter(); 设置“信号量”和doSomething() 首先在远程命令的oncomplete 中发挥创造力(作为开发人员)检查是否设置。如果不直接从它返回,否则实际做点什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 2011-10-09
    • 1970-01-01
    • 1970-01-01
    • 2020-10-06
    • 1970-01-01
    相关资源
    最近更新 更多