在加载数据表后触发 JavaScript 操作

Trigger JavaScript action after Datatable is loaded

本文关键字:JavaScript 操作 加载 数据表      更新时间:2023-09-26

JSF 2.1 + PrimeFaces 3.2 Web 应用程序中,我需要在加载p:dataTable后触发 JavaScript 函数。我知道此组件中没有此类事件,因此我必须找到解决方法。

为了更好地理解这种情况,在页面加载时不会呈现数据表。它在成功登录后呈现:

<p:commandButton value="Login" update=":aComponentHoldingMyDataTable" 
                                    action="#{loginBean.login}" 
                                    oncomplete="handleLoginRequest(xhr, status, args)"/>

从上面的代码中可以看出,成功登录后我有一个 JavaScript 钩子,如果它有任何帮助的话。update属性强制数据表的呈现属性重估:

<p:dataTable  var="person" value="#{myBean.lazyModel}" rendered="#{p:userPrincipal() != null}" />

加载数据表后,我需要在每个行项上运行一个 JavaScript 函数,以便订阅 cometD 主题。

理论上,我可以使用登录按钮的 oncomplete 属性来触发myBean的属性,以便再次检索要在 dataTable 中显示的值,但它似乎不是很优雅。

JavaScript 函数应该对 dataTable 的每一行的rowKey做一些事情:

function javaScriptFunctionToBeTriggered(rowKey) {
    // do something
}

来自 oncomplete 属性的 javascript 方法在 ajax 请求完成后调用,因此在加载 dataTable 之后调用。

因此,您可以执行以下操作:

<p:commandButton ... oncomplete="doSomething()"/>

一切都应该正常。

如果页面重新加载,请尝试调用文档 ready:

$(document).ready(function() {
    doSomething();
});