Как использовать дочерний редактор в диалоговом окне компонента списка в AEM? - PullRequest
2 голосов
/ 27 мая 2020

Я пытаюсь включить дочерний редактор в диалоговом окне компонента списка, чтобы пользователи могли добавлять в него собственный компонент, например компонент карусели из ядра.

Я использую AEM 6.5, а sling: resourceSuperType - это список из ядра.

My .context. xml компонента выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<jcr:root
    xmlns:sling="http://sling.apache.org/jcr/sling/1.0"
    xmlns:cq="http://www.day.com/jcr/cq/1.0"
    xmlns:jcr="http://www.jcp.org/jcr/1.0"
    cq:isContainer="{Boolean}true"
    jcr:primaryType="cq:Component"
    jcr:title="List"
    sling:resourceSuperType="core/wcm/components/list/v2/list"
    componentGroup="MyContent"
    teaserDelegate="thisPackage/components/content/teaser/v1/teaser" />

Файл HTML компонента списка, который называется «list. * 1019» * "выглядит следующим образом:

<sly data-sly-use.list="com.thisPackage.aem.dna.core.models.v1.List"
     data-sly-use.template="core/wcm/components/commons/v1/templates.html">

  <sly data-sly-resource="${resource.path @ resourceType='wcm/foundation/components/parsys/newpar', appendPath='/*', decorationTagName='div', cssClassName='new section aem-Grid-newComponent'}"
       data-sly-test="${wcmmode.edit || wcmmode.preview}">
  </sly>
</sly>

Я могу открыть диалоговое окно компонента в режиме редактирования. однако, если я добавлю новые компоненты в новый дочерний редактор в диалоговом окне и попытаюсь закрыть диалоговое окно. Я не могу закрыть диалог. Сообщение об ошибке:

org.apache.sling.api.resource.PersistenceException: Unable to commit changes to session

Я последовал примеру "github.com/adobe/aem-core-wcm-components/issues/696" и переместил editConfig из карусели в свой компонент списка. Но это не решило проблему.

Что делать?

Ответы [ 2 ]

2 голосов
/ 29 мая 2020

Это не работает, потому что сервлет, отвечающий за обновление данных, имеет тип ресурса = core / wcm / components / carousel / v1 / carousel

Вы можете видеть в сетевом вызове, что запрос XHR отправляется на сервер с URL-адресом, например:

 http://localhost:4202/content/we-retail/language-masters/en/jcr:content/root/responsivegrid/carousel.container.html

Как вы можете видеть, селектор контейнер отправляется и лежит в основе сервлета:

   https://github.com/adobe/aem-core-wcm-components/blob/master/bundles/core/src/main/java/com/adobe/cq/wcm/core/components/internal/servlets/ContainerServlet.java

прослушивает только основной компонент ресурс-тип.

В вашем случае это пользовательский компонент, следовательно, тип ресурса не совпадает, и, следовательно, вы получаете сообщение об ошибке.

Возможны две вещи:

1: Быстро и легко - просто использовать sling: resourceSuperType = core / wcm / components / carousel / v1 / carousel

Создайте собственные клиентские библиотеки, как это:

/ apps / core / wcm / components / commons / editor / dialog / childreneditor / v1 / childreneditor / clientlibs

, но измените var POST_SUFFIX = ".container. html"; в свой собственный селектор

, а затем создайте свой собственный сервлет (зарегистрированный в вашем собственном определенном селекторе), такой же, как основной компонент.

Надеюсь, это поможет!

0 голосов
/ 05 июня 2020

Это ошибка в AEM 6.5, и команда работает над ней.

https://github.com/adobe/aem-core-wcm-components/issues/985

...