Javascript Primefaces脚本完成后调用我的jQuery函数

Javascript Primefaces脚本完成后调用我的jQuery函数,javascript,jquery,jsf-2,primefaces,Javascript,Jquery,Jsf 2,Primefaces,说明: 使用Primefaces时,html页面由Servlet呈现。有时Servlet只生成html标记,但有时生成javascript 案例1 XHTML: 生成: 你好!!! 在这种情况下,使用jQuery脚本添加附加回调非常容易。因为所有html元素都已生成 案例2: XHTML: 当我想在Primefaces中加载页面后执行JS函数时,有两种方法适合我: 或者使用jQuery(因为Primefaces已经使用它),最好的解决方案是嵌套document.ready两次,这样我的

说明:

使用Primefaces时,html页面由Servlet呈现。有时Servlet只生成html标记,但有时生成javascript

案例1

XHTML:


生成:

你好!!!
在这种情况下,使用jQuery脚本添加附加回调非常容易。因为所有html元素都已生成

案例2:

XHTML:


当我想在Primefaces中加载页面后执行JS函数时,有两种方法适合我:

  • 或者使用jQuery(因为Primefaces已经使用它),最好的解决方案是嵌套document.ready两次,这样我的JS代码在所有Primefaces代码之后执行:
    • jQuery(文档).ready(函数(){
      jQuery(文档).ready(函数(){
      //在document.ready中执行两次,可在Primefaces回调后执行
      myInitialisationFunction();
      });
      });
  • 或者将p:remoteCommand与自动运行一起使用,并将oncomplete JS回调放在其上
    • 这种方式表单由AJAX提交到服务器,但服务器端不执行侦听器,之后执行JS回调

您没有指定正在使用的PrimeFaces版本。但是,从PrimeFaces 7.0开始,没有PrimeFaces就绪的事件。这是2019年PrimeFaces核心开发人员tandraschko

他的建议是,在页面的末尾添加一个-handler,它应该在PrimeFaces之后添加ready()-handler(这实际上对初始化也有同样的作用)

在末尾添加ready()-处理程序可以直接通过XHTML代码中的
来完成,也可以使用OmniFaces组件来完成,该组件可以放置在XHTML中的任何位置,但会在生成的HTML中重新定位到末尾。下面是一些示例代码:

<ui:composition xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
                xmlns:h="http://xmlns.jcp.org/jsf/html"
                xmlns:o="http://omnifaces.org/ui"
                xmlns:p="http://primefaces.org/ui">

  <o:onloadScript rendered="#{not faces.ajaxRequest}">
    $(function() {
      console.log('PrimeFaces now ready.');
    })
  </o:onloadScript>

  <!-- your JSF and PrimeFaces components go here... -->

</ui:composition>

$(函数(){
log('PrimeFaces现在准备就绪');
})
我还使用嵌套的ready()-处理程序尝试了OndroMih的建议,这似乎也很有效