如何在 AEM 中的列表组件对话框中使用子编辑器?
How to use children editor on a list component's dialog on AEM?
我正在尝试在列表组件的对话框中启用子编辑器,以允许用户向其中添加自定义组件,例如核心中的旋转木马组件。
我使用 AEM 6.5,sling:resourceSuperType 是核心列表。
我的.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" />
名为"list.html"的列表组件HTML文件如下:
<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 从 carousel 移动到我的列表组件。但是,并没有解决问题。
我能做什么?
这不起作用,因为负责更新数据的 servlet 是 resourceType = core/wcm/components/carousel/v1/carousel
您可以在网络调用中看到 XHR 请求被发送到具有 url 的服务器,例如:
http://localhost:4202/content/we-retail/language-masters/en/jcr:content/root/responsivegrid/carousel.container.html
如您所见,选择器 容器 被发送并作为底层 servlet :
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";到您自己的选择器
然后像核心组件一样创建你自己的servlet(注册到你自己定义的选择器)。
希望对您有所帮助!
这是 AEM 6.5 上的错误,团队正在解决。
我正在尝试在列表组件的对话框中启用子编辑器,以允许用户向其中添加自定义组件,例如核心中的旋转木马组件。
我使用 AEM 6.5,sling:resourceSuperType 是核心列表。
我的.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" />
名为"list.html"的列表组件HTML文件如下:
<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 从 carousel 移动到我的列表组件。但是,并没有解决问题。
我能做什么?
这不起作用,因为负责更新数据的 servlet 是 resourceType = core/wcm/components/carousel/v1/carousel
您可以在网络调用中看到 XHR 请求被发送到具有 url 的服务器,例如:
http://localhost:4202/content/we-retail/language-masters/en/jcr:content/root/responsivegrid/carousel.container.html
如您所见,选择器 容器 被发送并作为底层 servlet :
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";到您自己的选择器
然后像核心组件一样创建你自己的servlet(注册到你自己定义的选择器)。
希望对您有所帮助!
这是 AEM 6.5 上的错误,团队正在解决。