JQuery与Primefaces冲突?

我在JSF页面的头文件中包含了JQuery1.5。 在那个页面中有一堆已经编码的Primefaces组件。 在页面头部包含了Jquery.js之后,像<p:commandButton>这样的一些primefaces组件失去了它们的外观,并且<p:fileUpload>变得像普通的JSP <input type="file"> ,失去了它的AJAX能力完全。

有没有办法安全地使用jQuery与primefaces(没有冲突)?

我遇到了与问题中所描述的相同的问题。 这就是为什么我想出了以下解决scheme:

包括内置jQuery库(目前1.4.1)primefaces作为包括自己的jQuery库导致CSS格式化问题。 添加target="head"属性允许在任何地方指定标签 – 例如,当使用模板时,您并不总是可以访问<head>标签:

 <h:outputScript library="primefaces" name="jquery/jquery.js" target="head" /> 

默认情况下,冲突模式中包含primefaces jQuery库。 这意味着$()快捷键不能被使用。 要解决这个问题,请在<script><h:outputScript>标记中包含以下行:

 <h:outputScript target="head"> // Add the $() function $ = jQuery; // Now you can use it $(document).ready(function() { ... }); </h:outputScript> 

这是迄今为止使用primefaces 2.2.1可以挖掘的最好的解决scheme。

为什么不在PrimeFaces中使用jquery包?

 <h:outputScript library="primefaces" name="jquery/jquery.js" /> 

PrimeFaces 2.2.1有jQuery 1.4.4和3.0(在开发中)有1.5.1。

许多JavaScript库使用$作为函数或variables名称,就像jQuery一样。 在jQuery的情况下, $jQuery的别名,所以所有function都可以使用,而不使用$ 。 以下是一些方法:

  • jQuery.noConflict(); 在jQuery初始化之前,请参阅下文

     jQuery.noConflict(); $(document).ready(function(){ // your jQuery code }); 
  • 创build一个不同的别名,而不是jQuery在脚本的其余部分使用。

      var j = jQuery.noConflict(); // Do something with jQuery j("div p").hide(); 
  • 更改$的所有实例:用jQuery代码块中的jQueryreplace$

      jQuery(document).ready(function){ jQuery("div p").hide(); }) 
  • 完全将jQuery移动到另一个对象中的新名称空间。

     var dom = {}; dom.query = jQuery.noConflict(true); // Do something with the new jQuery dom.query("div p").hide(); 
  • $的范围设置为本地而不是全局

      // Method 1 jQuery(document).ready(function($){ $("div").hide(); }); // Method 2 (function($) { /* some code that uses $ */ })(jQuery); 

    注意:这一点有一个缺点,你将无法访问你的其他库的$()方法。

Original Reference

我的解决scheme是在默认页面添加此代码:

 <script type="text/javascript">var $j = jQuery.noConflict(true);</script> 

之后,我用$ j使用jquery。

谢谢

jQuery有一个“ noConflict ”模式,允许它和其他库并排播放。 我没有使用Primefaces组件,所以我不知道,但是如果你在noconflict模式中包含jQuery,你的问题可能会消失。

我的经验:

我有同样的问题,从来没有得到它与两个jQuery的库工作。 (我使用jQuery而不是$但从来没有试过jQuery.noConflict() )。

我的解决scheme是只使用与Cagatays答案中所述的primefaces捆绑在一起的库。

解决Primefaces和jQuery之间的冲突避免导入任何外部的jQuery文件,所以要解决导入位于primeface jar中的jQuery文件的问题

 <h:outputScript library="primefaces" name="jquery/jquery.js" target="head" /> <h:outputScript library="primefaces" name="jquery/jquery-plugins.js" target="head" /> 

并在您的jQuery代码replace$与jQuery。