5

在 a 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)"/>

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

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

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

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

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

function javaScriptFunctionToBeTriggered(rowKey) {
    // do something
}
4

2 回答 2

4

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

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

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

一切都应该正常。

于 2012-06-11T11:21:58.700 回答
0

如果页面重新加载,请尝试在准备好的文档中调用:

$(document).ready(function() {
    doSomething();
});
于 2014-05-06T14:55:31.550 回答