L'ajout de jQuery pour PrimeFaces résultats dans Uncaught TypeError sur tous les lieux
Je suis l'aide de PrimeFaces 3.5 et JSF 2.0. Je voulais utiliser un plugin jQuery, j'ai donc inclus jQuery dans ma webapp.
<h:head>
<h:outputScript name="js/jquery.min.js" />
<h:outputScript name="js/jquery-ui.js" />
</h:head>
Cependant, lors de l'utilisation de composants PrimeFaces, j'obtiens les erreurs de type comme ceci:
Uncaught TypeError: Cannot read property 'longueur' undefined
Uncaught TypeError: Object [object object] n'a pas de méthode de saisie semi-automatique
Uncaught TypeError: Cannot read property 'keyCode' undefined
Uncaught TypeError: ce.jq.déplaçable n'est pas une fonction
Uncaught TypeError: Cannot read property 'LinearAxisRenderer' undefined
Uncaught TypeError: Object [object object] n'a pas de méthode 'fileupload'
Uncaught TypeError: ce.jqEl.datetimepicker n'est pas une fonction
Etc.
Comment est-il la cause et comment puis-je le résoudre?
oui, il n'y a pas de problème avec la fileupload fonction. le téléchargement de fichiers fonctionne comme un charme, le seul problème est qu'il me donne une erreur typeerror pour jquery et cela me donne des problèmes avec mes autres fonctions jquery.
Juste une supposition, peut-être que vous essayez d'inclure la librairie jquery et il peut entrer en conflit avec PF jquery.
salut, oui j'ai inclus une version supérieure de jquery.js parce que je suis actuellement en utilisant une bibliothèque
tag-it
référence: github.com/aehlke/tag-it. parce que si je n'ai pas, mauvais obtenir un Uncaught TypeError: Object [object Object] has no method 'autocomplete' tag-it.js:294
Alors vous devriez essayer
$.noConflict(true);
comme iciOriginalL'auteur galao | 2013-04-23
Vous devez vous connecter pour publier un commentaire.
PrimeFaces est un jQuery en fonction JSF bibliothèque de composants. Il déjà livré avec jQuery et jQuery UI sorti de la boîte. Il n'est pas juste pour charger manuellement une autre copie de jQuery/jQuery UI pour une raison quelconque. Plusieurs de version fichiers jQuery serait seul conflit les uns avec les autres de cette façon, parce qu'ils n'utilisent pas nécessairement/partager exactement les mêmes variables/fonctions.
Se débarrasser de toutes ces chargé manuellement jQuery/UI fichiers. Cela n'a aucun sens.
Si vous l'avez fait parce que vous avez besoin pour utiliser jQuery/INTERFACE utilisateur de la magie dans une page qui n'est pas nécessairement utiliser tout PrimeFaces composants (et donc de ses groupés jQuery ne sera pas auto-inclus et donc
$()
serait pas disponible), alors vous pouvez toujours manuellement inclure explicitement PrimeFaces-livré jQuery dans certains maître modèle comme ci-dessous:(le
target="head"
est inutile si vous spécifiez directement à l'intérieur de<h:head>
)Si vous avez absolument besoin de fournir votre propre version de jQuery, parce que celui fourni dans PrimeFaces est obsolète, alors vous avez 2 options:
Laissez votre webapp fournir sa propre exactement sur le même identificateur de ressources (bibliothèque/nom)
/resources/primefaces/jquery/jquery.js
(ne pas modifier le chemin d'accès ni de nom de fichier!). Celui-ci va alors être choisi à la place de la PrimeFaces-livré à un.Décompresser
primefaces.jar
, remplacer/META-INF/resources/primefaces/jquery/jquery.js
fichier avec la version la plus récente (ne pas modifier le chemin d'accès ni de nom de fichier!), repack un nouveauprimefaces.jar
.(et n'oubliez pas de supprimer tous ceux
<h:outputScript>
références à propre copie)Test cependant thorougly. Certains PrimeFaces fonctionnalité spécifique peut casser avec la mise à niveau à cause de petits changements/corrections de bugs dans la plus récente version jQuery par rapport à la PrimeFaces-livré à un.
Par-dessus tout, vous devez faire absolument sûr que vous ne pas fournir de multiples copies de jQuery/UI, ou vous serez toujours confrontés à des conflits/les affrontements comme actuellement. À l'aide de
$.noConflict()
que certaines personnes peuvent suggérer n'est absolument pas destiné à être en mesure d'utiliser plusieurs bibliothèques jQuery ensemble. Il est destiné à être en mesure d'utiliser jQuery avec une autre librairie JS qui, coïncidence, utilise également$()
que la fonction globale, comme Prototype. Voir aussi un.o. Jquery et prototype noconflict.tag-it
référence: github.com/aehlke/tag-it. parce que si je n'ai pas, mauvais obtenir unUncaught TypeError: Object [object Object] has no method 'autocomplete' tag-it.js:294
Encore une fois, vous ne devrait pas offre une autre copie de jQuery. Au lieu de cela, la mise à niveau/remplacement de la PrimeFaces fourni.
avez-option 1 et cela a fonctionné! merci!!
Vous êtes les bienvenus.
OriginalL'auteur BalusC