直观地处理数据资源错误 - AEM

data-sly-resource error handling in sightly - AEM

data-sly-resource 标签允许通过以下方式引用另一个组件中的资源。

<article data-sly-resource="path/to/resource"></article>

我们 path/to/resource 被内容作者视为对话领域的一部分。如果内容作者 select 路径错误地不存在,内容作者将无法访问页面,给出 HTTP 500 错误并且没有其他方法可以在不转到 CRX 的情况下更正它。在无法访问 CRX 的环境中,我们无法删除不正确的节点。日志中的异常是

Caused by: org.apache.sling.scripting.sightly.SightlyException: org.apache.sling.api.resource.ResourceNotFoundException: No resource found
at com.adobe.cq.sightly.WCMScriptHelper.includeResource(WCMScriptHelper.java:143)
at com.adobe.cq.sightly.WCMScriptHelper.includeResource(WCMScriptHelper.java:86)
at com.adobe.cq.sightly.internal.extensions.ResourceExtension.call(ResourceExtension.java:99)
at org.apache.sling.scripting.sightly.impl.engine.runtime.RenderContextImpl.call(RenderContextImpl.java:89)

开箱即用的 reference component (/libs/foundation/components/reference/reference.jsp) 通过 catch 块处理此问题,内容作者可以更正路径。但那是 JSP 基础而不是视觉基础。

有没有办法快速处理这个问题?

试试这个语法,路径应该在 EL 表达式中给出:

<article data-sly-resource="${ @ path='path/to/resource'}"></article>

处理此问题的正确方法是通过一个 Use-API 对象,该对象将尝试查找资源并处理任何异常:

<article data-sly-use.helper="myHelper" data-sly-test="${helper.resource}" data-sly-resource="${helper.resource}"></article>

SLING-5811 开始,可以将实际的 org.apache.sling.api.resource.Resource 传递给 data-sly-resource,对于旧版本的 HTL/Sightly,您需要传递一个路径。