jquery与EL表达式的$冲突

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jquery与EL表达式的$冲突相关的知识,希望对你有一定的参考价值。

写jsp项目是需要在前台显示request对象的参数值,用EL表达式写作$songname,可是页面上什么都没有。
从网上查到的
1.在jsp页面前面加上这样一句:<%@ page isELIgnored="false"%>;
2.js文件中的$符号也替换了:var $j = jQuery.noConflict();
仍然不能用。
我把jQuery包:<script type="text/javascript" src="script/jquery-1.2.6.pack.js"></script>去掉才能显示出来EL表达式的内容,但是我刚进入页面时需要通过jQuery从后台查询出页面内容,请问有没有哪位高人能提出解决方法

确实是和jquery 冲突,$是jquyer 的选择器
如果外部用了,哪就别用jquery了,如果实在想用jquyer,又想简化程序,就把其他地方的 $j改成 $_$ 就好了。如果用jquery 一定不要再掺和着用 $。。。
参考技术A jQuery的$和EL表达式的$是不会冲突的,你再看看是不是别的地方配置的不对吧。 参考技术B 噢,是EL的问题,他可能把Jquery的代码当做是EL了。
具体原因不明 当引入jquery后EL表达式会被当成常量来显示.加上<%@ page isELIgnored="false"%>就解决了
参考技术C jquery.js代码中一般都有类似jQuery = window.jQuery = window.$的代码,当有可能冲突的时候,你就把调用jquery的$都写成jQuery就好了

JQuery 与 Primefaces 冲突? [复制]

【中文标题】JQuery 与 Primefaces 冲突? [复制]【英文标题】:JQuery Conflicts with Primefaces? [duplicate] 【发布时间】:2011-07-24 08:36:37 【问题描述】:

我在 JSF 页面的标题中包含了 JQuery1.5。在那个页面中有一堆已经编码的 Primefaces 组件。在我将Jquery.js 包含在页面标题中后,一些primefaces 组件(如&lt;p:commandButton&gt;)失去了它们的皮肤,&lt;p:fileUpload&gt; 看起来像普通的JSP &lt;input type="file"&gt; 并完全失去了它的AJAX 功能。

有没有办法安全地使用 JQuery 和 primefaces(没有冲突)?

【问题讨论】:

我不明白为什么这个问题被标记为This question has been ask before。链接的问题是在此问题后 2 年提出的。 【参考方案1】:

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

包含 primefaces 内置 jQuery 库(当前为 1.4.1),因为包含自己的 jQuery 库会导致 CSS 格式问题。添加 target="head" 属性允许在任何地方指定标签 - 例如使用模板时,您并不总是可以访问&lt;head&gt; 标签:

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

primefaces jQuery 库默认包含在冲突模式中。这意味着不能使用 $() 快​​捷方式。要解决此问题,请在 &lt;script&gt;&lt;h:outputScript&gt; 标记中添加以下行:

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

这是迄今为止我能找到的最好的解决方案,使用 primefaces 2.2.1。

【讨论】:

除了上面的 Lars 解释之外,Primefaces 不会在不使用 Primefaces 组件的页面上自动包含 jQuery,即使 Primefaces 命名空间是在 标签中定义的,所以您可以使用上面 Lars 解释的方法或更改您的组件之一以使用 Primefaces 组件实现,例如将 更改为 【参考方案2】:

为什么不将 jquery 包与 PrimeFaces 一起使用?

<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 的 jquery 没有 noconflict on。【参考方案3】:

许多 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);

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

Original Reference

【讨论】:

【参考方案4】:

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

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

之后我使用 jquery:

$j 

谢谢,

【讨论】:

【参考方案5】:

jQuery 有一个 'noConflict' 模式,可以很好地与其他库一起玩。我没有使用过 Primefaces 组件,所以我不确定,但如果你在无冲突模式下包含 jQuery,你的问题可能会消失。

【讨论】:

【参考方案6】:

我的经验:

我遇到了同样的问题,但从来没有使用过这两个 jquery 库。 (我使用jQuery 而不是$,但从未尝试过jQuery.noConflict())。

我的解决方案是仅使用与 primefaces 捆绑的库,如 Cagatays 回答中所述。

【讨论】:

我也一样。我只能使用 jQuery 内置的 primefaces;当使用我自己的 jQuery 库时,CSS 样式将被破坏。这意味着我只能使用 jQuery() 函数而不是 $()。【参考方案7】:

为了解决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 代码中将 $ 替换为 jQuery。

【讨论】:

为什么不改进 39 个投票的答案,而不是创建一个几乎相同的答案?

以上是关于jquery与EL表达式的$冲突的主要内容,如果未能解决你的问题,请参考以下文章

jquery中使用el表达式的问题,求教

在js或者jquery里可以使用el表达式吗?

java html页面可以使用el表达式吗

一个奇怪的EL表达式错误

js中使用el表达式

求高手 java一个查询得到的集合list 如何用jquery_ajax让el表达式使用到这个集合