Ответ 1
PrimeFaces - это библиотека компонентов JSF, основанная на jQuery. Он уже поставляется с jQuery и jQuery UI из коробки. Неправильно вручную загрузить другую копию пользовательского интерфейса jQuery/jQuery по какой-либо причине. Несколько разных версий jQuery файлов только конфликтуют друг с другом таким образом, потому что они не обязательно используют/совместно используют одни и те же переменные/функции.
Избавьтесь от всех загруженных вручную файлов jQuery/UI. Это не имеет смысла.
Если вы это сделали, потому что вам нужно использовать некоторую магию jQuery/UI на какой-либо странице, которая не обязательно использует какие-либо компоненты PrimeFaces (и, следовательно, ее связанный jQuery не будет автоматически включен и, следовательно, $()
будет недоступен), тогда вы всегда можете вручную явно включить пакет jQuery, связанный с PrimeFaces, в каком-то главном шаблоне, как показано ниже:
<h:outputScript library="primefaces" name="jquery/jquery.js" target="head" />
<h:outputScript library="primefaces" name="jquery/jquery-plugins.js" target="head" />
(target="head"
не требуется, если вы укажете их непосредственно внутри <h:head>
)
Если вам абсолютно необходимо предоставить свою собственную версию jQuery, потому что тот, который поставляется в PrimeFaces, устарел, у вас есть 2 варианта:
-
Пусть ваш webapp будет поставляться самостоятельно на точно таком же идентификаторе ресурса (library/name)
/resources/primefaces/jquery/jquery.js
(не изменяйте путь и имя файла!). Затем этот файл будет выбран вместо пакета, входящего в состав PrimeFaces. -
Распакуйте
primefaces.jar
, замените файл/META-INF/resources/primefaces/jquery/jquery.js
на новую версию (не изменяйте путь и имя файла!), переупакуйте новыйprimefaces.jar
.
(и не забудьте удалить все те <h:outputScript>
ссылки на собственную копию)
Протестируйте, однако, толерантно. Некоторые функции, специфичные для PrimeFaces, могут сломаться с обновлением из-за незначительных изменений/исправлений в новой версии jQuery по сравнению с пакетом PrimeFaces.
Прежде всего, вы должны быть абсолютно уверены, что вы не предоставляете несколько копий jQuery/UI, или вы по-прежнему сталкиваетесь с конфликтами/столкновениями, как в настоящее время. Использование $.noConflict()
, как могут предложить некоторые люди, абсолютно не имеет намерения использовать несколько библиотек jQuery. Он намерен использовать jQuery вместе с другой JS-библиотекой, которая по совпадению также использует $()
как глобальную функцию, такую как Prototype. См. Также a.o. JQuery и прототип noconflict.