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。