我在JSF页面的标题中包含了JQuery1.5。在该页面中,有一堆已经编码的Primefaces组件。我已经包含在网页标题中的Jquery.js
后,一些primefaces像<p:commandButton>
组件失去他们的皮肤和<p:fileUpload>
变得看起来像正常的JSP <input type="file">
和完全失去了AJAX功能。JQuery与Primefaces冲突吗?
是否有使用jQuery安全以及primefaces(不冲突)的方式?
我在JSF页面的标题中包含了JQuery1.5。在该页面中,有一堆已经编码的Primefaces组件。我已经包含在网页标题中的Jquery.js
后,一些primefaces像<p:commandButton>
组件失去他们的皮肤和<p:fileUpload>
变得看起来像正常的JSP <input type="file">
和完全失去了AJAX功能。JQuery与Primefaces冲突吗?
是否有使用jQuery安全以及primefaces(不冲突)的方式?
我遇到了与问题中所述相同的问题。这就是为什么我想出了以下解决方案:
包括primefaces内置jQuery库(当前1.4.1),因为包括自己的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的最佳解决方案。
非常感谢:) – Selvin 2011-04-01 10:15:51
除了上面的Lars解释之外, Primefaces在没有使用Primefaces组件的页面上不会自动包含jQuery,即使在标记中定义了Primefaces命名空间,您也可以使用方法由上面的Lars解释,或更改其中一个组件以使用Primefaces组件实现,例如将 。 –
2013-04-06 15:13:15
jQuery有一个“noConflict”模式这使得它能够很好地由侧与其他库玩侧。我没有使用Primefaces组件,所以我不确定,但如果您在noconflict模式中包含jQuery,您的问题可能会消失。
许多JavaScript库使用$作为函数或变量名称,就像jQuery一样。在jQuery的情况下,$只是jQuery的别名,所以所有功能都可用,不需要使用$。以下是一些方法:jQuery的初始化之前
写jQuery.noConflict();
,见下文
jQuery.noConflict();
$(document).ready(function(){
// your jQuery code
});
创建一个不同的别名,而不是jQuery的脚本的其余部分使用。
var j = jQuery.noConflict();
// Do something with jQuery
j("div p").hide();
变化$所有的实例:jQuery的代码块与jQuery
更换$
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);
注:这一点上带有一个缺点,你将不能访问你的其他库的$()方法。
为什么不使用与PrimeFaces jQuery的包?
<h:outputScript library="primefaces" name="jquery/jquery.js" />
PrimeFaces 2.2.1有jQuery 1.4.4和3.0(在开发中)有1.5.1。
作为一个方面说明,2.2.1的jquery默认启用了noconflict,3.0没有noconflict。 – 2011-03-28 11:09:11
我的经验:
我有同样的问题,从来没有得到它用jQuery的库工作。 (我用jQuery
,而不是$
但从未试过jQuery.noConflict()
)。
我的解决方案是只使用与Cagatays答案中所述的primefaces捆绑在一起的库。
同样适用于我。我只能使用内置jQuery的primefaces;当使用我自己的jQuery库时,CSS样式将被损坏。这意味着我只能使用jQuery()函数而不是$()。 – 2011-04-01 07:01:43
我的解决办法是在默认页面添加以下代码:
<script type="text/javascript">var $j = jQuery.noConflict(true);</script>
之后使用jQuery有:
$j
感谢,
解决Primefaces和jQuery避免冲突导入任何外部jQuery文件,因此解决导入位于primefaces jar中的jQuery文件的问题
<h:outputScript library="primefaces" name="jquery/jquery.js" target="head" />
<h:outputScript library="primefaces" name="jquery/jquery-plugins.js" target="head" />
并在你的jQuery代码中用$替换$。
为什么不改进39 upvoted的答案,而不是创建一个几乎相同的答案? – Kukeltje 2016-03-04 17:39:18
我不明白为什么这个问题被标记为_这个问题之前曾被问过。在这个问题发生两年后,问题就出现了。 – 2017-06-19 20:57:20