L’aggiunta di jQuery a PrimeFaces determina l’errore Uncaught TypeError su tutto il luogo

Sto usando PrimeFaces 3.5 e JSF 2.0. Volevo usare un plugin jQuery, quindi ho incluso jQuery nella mia webapp.

    

Tuttavia, quando utilizzo i componenti PrimeFaces, ottengo errori tipo non rilevati in questo modo:

Uncaught TypeError: imansible leggere la ‘lunghezza’ della proprietà di undefined

Uncaught TypeError: Object [object Object] non ha alcun metodo ‘completamento automatico’

Uncaught TypeError: imansible leggere la proprietà ‘keyCode’ di undefined

Errore irreprensibile: this.jq.draggable non è una funzione

Uncaught TypeError: imansible leggere la proprietà ‘LinearAxisRenderer’ di undefined

Uncaught TypeError: Object [object Object] non ha alcun metodo ‘fileupload’

Errore irreversibile TypeError: this.jqEl.datetimepicker non è una funzione

Eccetera.

Come è causato e come posso risolverlo?

PrimeFaces è una libreria di componenti JSF basata su jQuery. Viene già fornito con jQuery e jQuery UI out the box. Non è giusto caricare manualmente un’altra copia di jQuery / jQuery UI per qualche motivo. Più file jQuery con versioni diverse sono in conflitto solo in questo modo, perché non usano / condividono esattamente le stesse variabili / funzioni.

Sbarazzarsi di tutti quei file jQuery / UI caricati manualmente. Questo non ha senso.

Se lo hai fatto perché hai bisogno di utilizzare qualche magia jQuery / UI in qualche pagina che non usa necessariamente componenti PrimeFaces (e quindi il suo jQuery in bundle non sarà auto-incluso e quindi $() non sarà disponibile), quindi puoi sempre includere manualmente jQuery in bundle PrimeFaces in alcuni modelli principali come di seguito:

   

(il target="head" non è necessario se li si specifica direttamente in )


Se devi assolutamente fornire la tua versione di jQuery, perché quella in PrimeFaces è obsoleta, hai 2 opzioni:

  • Lascia che la tua app web fornisca il proprio identico identificatore di risorsa (libreria / nome) /resources/primefaces/jquery/jquery.js (non modificare il percorso né il nome del file!). Questo verrà selezionato al posto di PrimeFaces.

  • Spacchetta primefaces.jar , sostituisci il file /META-INF/resources/primefaces/jquery/jquery.js con la versione più recente (non modificare il percorso o il nome file!), primefaces.jar un nuovo primefaces.jar .

(e non dimenticare di rimuovere tutti i riferimenti alla propria copia)

Testare comunque accuratamente. Alcune funzionalità specifiche di PrimeFace potrebbero interrompersi con l’aggiornamento a causa di piccole modifiche / correzioni di errori nella versione jQuery più nuova rispetto a quella in PrimeFaces.

Soprattutto, dovresti essere assolutamente sicuro di non fornire più copie di jQuery / UI, altrimenti continuerai ad affrontare conflitti / scontri come al momento. L’utilizzo di $.noConflict() come $.noConflict() da alcune persone non è assolutamente previsto per poter utilizzare più librerie jQuery insieme. È intuito essere in grado di usare jQuery insieme ad un’altra libreria JS che per coincidenza usa anche $() come funzione globale, come Prototype. Vedi anche ao Jquery e prototipo di noconflict .