Проблема с PrimeFaces TextEditor в диалоге после обновления PrimeFaces 7 до 8 - PullRequest
2 голосов
/ 04 августа 2020

У меня есть приложение JSF с PrimeFaces, которое я обновляю до PrimeFaces версии 8 (в настоящее время использую версию 7).

После обновления у меня странное поведение с TextEditor в диалоговом окне. Я открываю диалоговое окно с помощью commandLink и обновляю его, обновляя sh его содержимое. Когда я это делаю, я получаю сообщение об ошибке на консоли JavaScript.

texteditor.js.xhtml?ln=primefaces&v=8.0:7 Uncaught TypeError: Cannot read property 'innerHTML' of null
    at e.value (texteditor.js.xhtml?ln=primefaces&v=8.0:7)
    at new e (texteditor.js.xhtml?ln=primefaces&v=8.0:7)
    at texteditor.js.xhtml?ln=primefaces&v=8.0:7
    at Array.map (<anonymous>)
    at e.value (texteditor.js.xhtml?ln=primefaces&v=8.0:7)
    at e.value (texteditor.js.xhtml?ln=primefaces&v=8.0:7)
    at e.value (texteditor.js.xhtml?ln=primefaces&v=8.0:7)
    at texteditor.js.xhtml?ln=primefaces&v=8.0:7
    at Array.forEach (<anonymous>)
    at e.value (texteditor.js.xhtml?ln=primefaces&v=8.0:7)

Ошибка возникает из-за кода:

a(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "selectItem", this).call(this, t, n), t = t || this.defaultItem, this.label.innerHTML = t.innerHTML

где t равно null, поэтому t.inner HTML выдает ошибку.

Однако - если я только открываю диалог, но не обновляю его - все работает нормально.

Я создал минимальный образец. Первый fink работает нормально, вторая ссылка создает ошибку.

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:p="http://primefaces.org/ui"
      xmlns:h="http://java.sun.com/jsf/html"
>

<h:head>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type"/>
    <title>test</title>
</h:head>
<h:body>
    <h:form id="contentForm">
        <p:commandLink value="works"
                       oncomplete="PF('dialogTemplateSendMailToPersonVar').show()"/>
        <br/>
        <p:commandLink value="does not work"
                       oncomplete="PF('dialogTemplateSendMailToPersonVar').show()"
                       update=":templatePersonSendMailForm"/>
    </h:form>

    <p:dialog id="dialogTemplateSendMailToPersonId" widgetVar="dialogTemplateSendMailToPersonVar" dynamic="true">
        <h:form id="templatePersonSendMailForm">

            <p:textEditor id="txtTemplateText" />

        </h:form>
    </p:dialog>
</h:body>

</html>

В этом примере обновление бесполезно, но вызывает ту же ошибку, что и на моей полной странице, где у меня есть вспомогательные bean-компоненты, заполняющие редактор и другие поля в диалоге.

Кто-нибудь испытывал что-то похожее или есть идеи, как это исправить? Я проверил примечания к выпуску для версий PrimeFaces 8.0.x, но не обнаружил никаких проблем с TextEditor. Не обновлять диалог - это не вариант; -)

1 Ответ

2 голосов
/ 04 августа 2020

ОК, проблема была исправлена ​​в 6.2 здесь: https://github.com/primefaces/primefaces/issues/2802

Однако, когда Quill JS 1.3.7 был обновлен для CVE безопасности, это изменение было потеряно.

Я только что отправил PR, чтобы исправить это, надеюсь, для 8.0.4 и 9.0.

PR: https://github.com/primefaces/primefaces/issues/2802

...