JQuery est en conflit avec Primefaces? [dupliquer]
cette question a déjà une réponse ici:
j'ai inclus JQuery1.5 dans l'en-tête d'une page JSF. Dans cette page, il y a un tas de Primefaces déjà codés. Après Je ont inclus le Jquery.js
dans l'en-tête de la page, certains primefaces composants comme <p:commandButton>
perd leur peau et <p:fileUpload>
devient ressembler à la normale JSP <input type="file">
et perdre sa capacité AJAX entièrement.
y a-t-il un moyen d'utiliser jQuery en toute sécurité avec les primefaces(sans conflit)?
7 réponses
j'ai eu le même problème que décrit dans la question. C'est pourquoi j'ai trouvé la solution suivante:
Comprennent les primefaces intégré dans la bibliothèque jQuery (actuellement 1.4.1), y compris une bibliothèque jQuery conduit à des problèmes de mise en forme CSS. L'ajout de l'attribut target="head"
permet de spécifier la balise partout - par exemple lors de l'utilisation de templating vous n'avez pas toujours accès à la balise <head>
:
<h:outputScript library="primefaces" name="jquery/jquery.js" target="head" />
les primefaces la bibliothèque jQuery est incluse par défaut en mode conflit. Cela signifie que le raccourci $()
ne peut pas être utilisé. Pour résoudre ce problème, inclure la ligne suivante dans une étiquette <script>
ou <h:outputScript>
:
<h:outputScript target="head">
// Add the $() function
$ = jQuery;
// Now you can use it
$(document).ready(function() {
...
});
</h:outputScript>
C'est la meilleure solution que j'ai pu trouver jusqu'à présent, en utilisant primefaces 2.2.1.
pourquoi ne pas utiliser les faisceaux jquery avec des PrimeFaces?
<h:outputScript library="primefaces" name="jquery/jquery.js" />
PrimeFaces 2.2.1 a jQuery 1.4.4 et 3.0(en développement) a 1.5.1.
de nombreuses bibliothèques JavaScript utilisent $ comme fonction ou nom de variable, tout comme jQuery. Dans le cas de jQuery, $ est juste un alias pour jQuery , donc toutes les fonctionnalités sont disponibles sans utiliser $ . voici quelques méthodes:
-
Write
jQuery.noConflict();
avant l'initialisation de jQuery,voir ci-dessousjQuery.noConflict(); $(document).ready(function(){ // your jQuery code });
-
créer un alias différent au lieu de jQuery à utiliser dans le reste du script.
var j = jQuery.noConflict(); // Do something with jQuery j("div p").hide();
-
changer toutes les instances de $ : remplacer
$
parjQuery
dans le bloc de code jQueryjQuery(document).ready(function){ jQuery("div p").hide(); })
-
déplacez complètement jQuery vers un nouvel espace de nom dans un autre objet.
var dom = {}; dom.query = jQuery.noConflict(true); // Do something with the new jQuery dom.query("div p").hide();
-
Définir la portée de la $ pour locale à la place de mondial
// Method 1 jQuery(document).ready(function($){ $("div").hide(); }); // Method 2 (function($) { /* some code that uses $ */ })(jQuery);
Note: ce point a un inconvénient, Vous n'aurez pas accès à la méthode $ () de votre autre bibliothèque.
ma solution est d'ajouter ce code dans la page par défaut:
<script type="text/javascript">var $j = jQuery.noConflict(true);</script>
après cela j'utilise jquery avec:
$j
Merci,
jQuery a un ' noConflict ' mode qui lui permet de jouer gentiment côte à côte avec d'autres bibliothèques. Je n'ai pas utilisé les composants de Primefaces, donc je ne suis pas sûr, mais si vous incluez jQuery en mode noconflict, vos problèmes disparaîtront probablement.
mon expérience:
j'ai eu le même problème et je ne l'ai jamais fait travailler avec les deux libs jquery. (J'utilise jQuery
au lieu de $
mais je n'ai jamais essayé jQuery.noConflict()
).
ma solution a été d'utiliser seulement le lib livré avec des primefaces comme décrit dans Cagatays réponse.
pour résoudre le conflit entre Primefaces et jQuery éviter d'importer tout fichier jquery externe, donc pour résoudre le problème importer les fichiers jQuery situés dans le pot primefaces
<h:outputScript library="primefaces" name="jquery/jquery.js" target="head" />
<h:outputScript library="primefaces" name="jquery/jquery-plugins.js" target="head" />
et dans votre code jQuery remplacer le $ par jQuery.