Primefaces и ошибка javascript JSF 2.3 Невозможно прочитать свойство «ошибка» null

Я использую простые лица с JSF2.3.

вот как мои зависимости

    dependencies {

    providedCompile 'javax.servlet:javax.servlet-api:4.0.0'
    compile group: 'javax.faces', name: 'javax.faces-api', version: '2.3'
    compile group: 'org.glassfish', name: 'javax.faces', version: '2.3.3'
    compile 'javax.servlet:jstl:1.2'
    compile 'org.jboss.weld.servlet:weld-servlet:2.4.5.Final'
    compile group: 'org.primefaces', name: 'primefaces', version: '6.2'
}

мой файл jsf очень простой

   <html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:p="http://primefaces.org/ui"
      xmlns:f="http://xmlns.jcp.org/jsf/core">
<h:head>
</h:head>
<f:view>
    <h:outputLabel value="Hello, world"/>
    <h:form>
        <p:selectOneMenu value="#{testView.chosen}"
                         style="width:200px">
            <f:selectItem itemLabel="Select listing template"/>
            <f:selectItems value="#{testView.list}"/>
            <p:ajax event="change" process="@this" update="@all"/>
        </p:selectOneMenu>
    </h:form>
</f:view>
</html>

и мой bean-компонент viewScoped также

    @Named
@ViewScoped
public class TestView implements Serializable {
String chosen;
List<String> list;

@PostConstruct
public void setup(){
    list = new ArrayList<>();
    list.add("alpha");
    list.add("gamma");
    list.add("bravo");
}

геттер и сеттер опущены для простоты.

дело в том, что я работал с (jsf 2.2, Primefaces 6.1) и все работает нормально.

после обновления (jsf 2.3, primefaces6.2) у меня возникает проблема при каждом изменении события (когда я меняю выбор)

ошибка

Uncaught TypeError: Cannot read property 'error' of null
    at Object.<anonymous> (core.js.xhtml?ln=primefaces&v=6.2:3)
    at i (jquery.js.xhtml?ln=primefaces&v=6.2:2)
    at Object.fireWith [as resolveWith] (jquery.js.xhtml?ln=primefaces&v=6.2:2)
    at A (jquery.js.xhtml?ln=primefaces&v=6.2:4)
    at XMLHttpRequest.<anonymous> (jquery.js.xhtml?ln=primefaces&v=6.2:4)

Есть ли конфликт javascript между jsf2.3 и Primefaces?


person Toumi    schedule 02.03.2018    source источник
comment
Значит, вы действительно использовали PrimeFaces 6.2 с JSF 2.2 и не получили этой ошибки? Вы точно не обновляли PrimeFaces? А в вашем развёрнутом проекте случайно оказалось 2 версии PrimeFaces?   -  person Kukeltje    schedule 02.03.2018
comment
И update="@all" следует использовать редко... Это работает, если вы не используете это? Предполагая, что ваш пример является минимально воспроизводимым примером, он должен работать, если вы удалите это   -  person Kukeltje    schedule 02.03.2018


Ответы (4)


AFAICS, это ошибка в Мохарре, я бы создал там проблему. Похоже, что ресурсы компонента доступны (см. PrimeFaces HeadRenderer) в постбэке, но почему-то они не отображаются в ответе внутри тега head.

ПРИМЕЧАНИЕ: это произойдет только с update=@all, иначе заголовок не будет заменен. На самом деле update=@all не следует использовать, только если это действительно действительно необходимо.

person tandraschko    schedule 15.03.2018
comment
На самом деле update=@all не следует использовать, только если это действительно очень-очень необходимо слушай, слушай... - person Kukeltje; 15.03.2018

Есть проблема с mojarra, потому что он должен отправлять все файлы, когда вы хотите отрендерить «все».

Между тем, здесь упоминается альтернативное решение: https://github.com/javaserverfaces/mojarra/issues/4354

Вы можете выполнить следующий скрипт после загрузки Primeface, чтобы он мог изменить способ рендеринга PF HEAD:

https://github.com/javaserverfaces/mojarra/files/2626517/primefaces_replacehead_hack.js.txt

С ним ПФ голову не заменит и код скорее всего продолжит работать.

Это сработало для меня.

person 0xfthul    schedule 01.12.2018

Что касается вашего фактического вопроса (который imo неправильно сформулирован),

Есть ли конфликт javascript между jsf2.3 и Primefaces?

Ответ:

Нет, нет. Поскольку демонстрация PrimeFaces называется «Запуск PrimeFaces-6.2 на Mojarra-2.3.2», согласно нижней части фактической рабочей демонстрации: https://www.primefaces.org/showcase/

Но ваше редактирование для меня предполагает (как я писал в своих комментариях), что у вас есть несколько версий PF в вашем фактическом работающем проекте.

person Kukeltje    schedule 02.03.2018

Я могу создать этот выпуск на PrimeFaces 6.2 и 6.3-SNAPSHOT ShowCase с упрощенной разметкой. В доставляемом контенте отсутствуют основные файлы javascript Primefaces. После обновления тела глобальная переменная Primefaces становится неопределенной/нулевой. Использование @form вместо @all все еще работает.

(уменьшенный) index.xhtml

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui" template="/WEB-INF/template.xhtml">

<ui:define name="body">
    <h:form>
        <p:commandButton value="BUTTON_TEXT" update="@all"
            process="@none" />
    </h:form>
</ui:define>

(minified) template.xhtml

<!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml"
        xmlns:h="http://java.sun.com/jsf/html"
        xmlns:f="http://java.sun.com/jsf/core"
        xmlns:ui="http://java.sun.com/jsf/facelets"
        xmlns:p="http://primefaces.org/ui">
    <h:head />
    <h:body>
        <ui:insert name="body"></ui:insert>
    </h:body>
    </html>

Трассировки стека:

VM47:1 Uncaught TypeError: Cannot read property 'cw' of null
    at <anonymous>:1:12
    at p (jquery.js.xhtml?ln=primefaces&v=6.2:2)
    at Ja (jquery.js.xhtml?ln=primefaces&v=6.2:3)
    at r.fn.init.append (jquery.js.xhtml?ln=primefaces&v=6.2:3)
    at r.fn.init.<anonymous> (jquery.js.xhtml?ln=primefaces&v=6.2:3)
    at T (jquery.js.xhtml?ln=primefaces&v=6.2:3)
    at r.fn.init.html (jquery.js.xhtml?ln=primefaces&v=6.2:3)
    at Object.updateBody (core.js.xhtml?ln=primefaces&v=6.2:3)
    at Object.updateElement (core.js.xhtml?ln=primefaces&v=6.2:3)
    at Object.doUpdate (core.js.xhtml?ln=primefaces&v=6.2:3)

Открыть: https://github.com/javaserverfaces/mojarra/issues/4354

person Sascha    schedule 15.03.2018
comment
Это ответ или новый вопрос? - person Kukeltje; 15.03.2018