Al agregar jQuery a PrimeFaces, se obtiene UnEught TypeError en todo el lugar
jsf uncaught-typeerror (1)
PrimeFaces es una biblioteca de componentes JSF basada en jQuery. Ya se envía con jQuery y jQuery UI fuera de la caja. No es correcto cargar manualmente otra copia de la interfaz de usuario jQuery / jQuery por algún motivo. Múltiples archivos jQuery con versiones diferentes solo entrarían en conflicto entre sí de esta manera, ya que no necesariamente usan / comparten exactamente las mismas variables / funciones.
Deshágase de todos esos archivos jQuery / UI cargados manualmente. Esto no tiene sentido.
Si lo hiciste porque necesitas utilizar algo de magia de jQuery / UI en alguna página que no use necesariamente ningún componente de PrimeFaces (y por lo tanto su jQuery incluido no se incluirá automáticamente y, por lo tanto, $()
no estaría disponible), entonces siempre puede incluir explícitamente de forma manual PrimeFaces-bundled jQuery en alguna plantilla maestra de la siguiente manera:
<h:outputScript library="primefaces" name="jquery/jquery.js" target="head" />
<h:outputScript library="primefaces" name="jquery/jquery-plugins.js" target="head" />
(el target="head"
es innecesario si los especifica directamente dentro de <h:head>
)
Si necesita suministrar su propia versión de jQuery, porque la que se incluye en PrimeFaces está desactualizada, entonces tiene 2 opciones:
Deje que su aplicación web sea la suya exactamente en el mismo identificador de recursos (biblioteca / nombre)
/resources/primefaces/jquery/jquery.js
(¡no cambie la ruta ni el nombre de archivo!). Éste será elegido en lugar del primer paquete de PrimeFaces.Descomprima
primefaces.jar
, reemplace/META-INF/resources/primefaces/jquery/jquery.js
archivo con la versión más nueva (¡no cambie la ruta ni el nombre de archivo!), Vuelva a empaquetar un nuevoprimefaces.jar
.
(y no se olvide de eliminar todas esas referencias <h:outputScript>
a la propia copia)
Prueba sin embargo con todo rigor. Algunas funcionalidades específicas de PrimeFaces pueden romperse con la actualización debido a pequeños cambios / correcciones de errores en la nueva versión de jQuery en comparación con la versión de PrimeFaces.
Sobre todo, debe asegurarse de no proporcionar múltiples copias de jQuery / UI, o aún enfrentará conflictos / enfrentamientos como actualmente. El uso de $.noConflict()
como algunas personas pueden sugerir no está diseñado para poder usar múltiples bibliotecas jQuery juntas. Está diseñado para poder usar jQuery junto con otra biblioteca JS que casualmente también usa $()
como función global, como Prototype. Ver también a Jquery y prototype noconflict .
Estoy usando PrimeFaces 3.5 y JSF 2.0. Quería usar un plugin jQuery, así que incluí jQuery en mi aplicación web.
<h:head>
<h:outputScript name="js/jquery.min.js" />
<h:outputScript name="js/jquery-ui.js" />
</h:head>
Sin embargo, cuando uso los componentes de PrimeFaces, recibo errores de tipo no detectados como este:
Unkeught TypeError: no se puede leer la propiedad ''length'' de undefined
Unkeught TypeError: Object [object Object] no tiene el método ''autocompletar''
Unkeught TypeError: no se puede leer la propiedad ''keyCode'' de undefined
Unkeught TypeError: this.jq.draggable no es una función
Unkeught TypeError: no se puede leer la propiedad ''LinearAxisRenderer'' de undefined
Unkeught TypeError: Object [object Object] no tiene el método ''fileupload''
Unkeught TypeError: this.jqEl.datetimepicker no es una función
Etc.
¿Cómo es esto causado y cómo puedo resolverlo?