Ошибка с p:selectOneMenu в Primefaces 3.4.2

Недавно я обновил Primefaces с 3.4 до 3.4.2, и теперь у меня проблемы на некоторых страницах, где есть компонент p:selectOneMenu. Я вижу ошибку в консоли JavaScript, которая говорит: TypeError: e.offset(...) is undefined. Эта ошибка регистрируется сразу при загрузке страницы.

Кто-нибудь знает, в чем проблема?


person partlov    schedule 03.01.2013    source источник
comment
Звучит как конфликт версий jQuery. Вы по какой-то причине вручную включаете файл jquery.js на каждую страницу вместо того, чтобы полагаться на тот, который уже предоставлен самим PrimeFaces? PrimeFaces обновляет версию встроенной библиотеки jQuery практически при каждом выпуске. Решением, очевидно, будет прекращение включения jQuery вручную и просто использование предоставленного PrimeFaces.   -  person BalusC    schedule 03.01.2013
comment
Нет, просто используйте предоставленный по умолчанию jQuery. Я видел, что они изменили версию jQuery в 3.4.2, поэтому я попробовал Primefaces 3.4.1, и он отлично работает. Ошибка JavaScript находится в файле primefaces.js, строка 1. Следуя стеку в Javascript, я увидел, что вызывается функция верхнего уровня: PrimeFaces.cw('SelectOneMenu','widget_aswdatatable_detaljSubview_editForm_paket',{id:'aswdatatable:detaljSubview:editForm:paket',effect:'fade'});}   -  person partlov    schedule 03.01.2013
comment
Я также использую 3.4.2 и не могу воспроизвести вашу проблему. Я все еще подозреваю, что какой-то плохой файл JS, связанный с jQuery, вызывает проблемы. Вы исследовали ссылки <script> в полученном HTML-выходе и/или HTTP-трафике, просто чтобы быть уверенным?   -  person BalusC    schedule 03.01.2013
comment
OK. Я нашел, почему это происходит, но до сих пор не знаю, является ли это ошибкой или я просто не использую это правильно. У меня есть один составной компонент с данными и несколькими диалогами, в которых отображаются сведения о записях. В составном компоненте я определил фасет detailForm и визуализировал этот фасет в каждом диалоговом окне. Конечно, я инкапсулировал каждый cc:renderFacet в разные f:subview. Это нормально, и если это не так, что я должен делать? Когда я оставляю только один cc:renderFacet, он работает нормально.   -  person partlov    schedule 03.01.2013
comment
Наконец, проблема возникает, когда я несколько раз визуализирую один и тот же аспект в составном компоненте. Primefaces генерирует одинаковые widgetVar для всех selectOneMenu элементов. Я узнаю это, проверяя сгенерированный HTML.   -  person partlov    schedule 04.01.2013


Ответы (1)


ОК, спустя много времени, наконец, понять, что происходит. В Primefaces 3.4.2 поведение p:selectOneMenu немного изменено таким образом, что событие change срабатывает сразу после загрузки страницы. Эта проблема проявляется, когда у нас есть полностью пустой p:selectOneMenu, что означает, что value из f:selectItems равно нулю, и нет f:selectItem для пустого варианта. В этом случае мы можем увидеть ошибку TypeError: e.offset(...) is undefined в консоли, и javascript с этого момента бесполезен, и больше ничего не работает. На данный момент он должен быть пустым f:selectItem или хотя бы одним элементом в f:selectItems.

person partlov    schedule 15.01.2013
comment
Хороший обходной путь. Вы зарегистрировали или нашли проблему в Primefaces Bug Tracker? Если да, пожалуйста, поделитесь здесь. - person KEYSAN; 11.03.2013
comment
Вообще-то нет. Может быть, эта ошибка исправлена ​​​​в 3.5, я действительно не знаю. Но на самом деле это, вероятно, большая проблема в jQuery, чем в Primefaces. - person partlov; 11.03.2013