加载数据表后触发 JavaScript 动作

per*_*ssf 5 javascript jsf primefaces

JSF 2.1+ PrimeFaces 3.2web 应用程序中,我需要在p:dataTable加载a 后触发 JavaScript 函数。我知道这个组件中没有这样的事件,所以我必须找到一个解决方法。

为了更好地理解场景,在页面加载时不呈现 dataTable。它在成功登录后呈现:

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

从上面的代码可以看出,我在成功登录后有一个 JavaScript 钩子,如果它有帮助的话。该update属性强制 dataTable 的呈现属性重新评估:

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

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

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

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

function javaScriptFunctionToBeTriggered(rowKey) {
    // do something
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*ndy 4

在ajax 请求完成,即在 加载 dataTable后,oncomplete将调用属性中的 javascript 方法。

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

<p:commandButton ... oncomplete="doSomething()"/>
Run Code Online (Sandbox Code Playgroud)

一切都应该正常。