我正在研究AEM资源解析器,目前我在Adobe Sling资源解析器工厂上进行了以下配置。
/content/mywebsite/>/
我有一个标签是从一个类似于:
的组件生成的<a data-desktop='/content/mywebsite/desktop.html'
data-android-href='/content/mywebsite/android.html'
data-ios-href='/content/mywebsite/mywebsite/ios.html'
href='/content/mywebsite/normal.html'>Click here</a>
理想情况下,这应该解决为像
这样的问题<a data-desktop='/desktop.html'
data-adroid-href='/android.html'
data-ios-href='ios.html'
href='/normal.html'>Click here</a>
具有讽刺意味的是,上面的标签中的最后一个href也没有被资源解析器解析,我仍然在调度程序上获得未解析的URL。
只有<a href='/content/mywebsite/something.html></a>'
的代码的所有其他资源解析器都会得到解决。我不明白为什么资源解析器没有选择具有多个数据元素的资源解析器。
答案 0 :(得分:1)
您确定它取决于属性的数量吗?看起来您的配置仅影响资源解析而不影响传出映射。该规则将应用于传入请求,因此当用户使用/something.html
命中您的AEM实例时,资源解析器将查找/content/mywebsite.something
处的资源以及映射到根目录的其他路径(如果有) )但据我了解,它不会影响AEM呈现链接到该内容的方式。
尝试更改规则,以便它使用双向映射:/content/mywebsite/:/
引用OSGi控制台中 Apache Sling Resource Resolver Factory 配置中 URL Mappings 字段的描述:
要应用于路径的映射列表。传入映射应用于请求映射到资源路径的路径,传出映射应用于将资源路径映射到后续请求中使用的路径。表单为
<internalPathPrefix><op><externalPathPrefix>
,其中<op>
为">"
用于传入映射,"<"
用于传出映射,":"
用于在两个方向上应用的映射。通过比较和替换URL前缀,以配置顺序应用映射。注意:不推荐使用"-"
作为<op>
值来指示两个方向的映射。 (resource.resolver.mapping
)
您可以使用资源解析器页面上的配置测试字段轻松测试您在 Apache Sling Resource Resolver Factory 中设置的配置OSGi控制台。您可以在http://<host>:<port>/system/console/jcrresolver
使用 Resolve 和 Map 按钮来查看路径如何双向转换。
此外,如果您在组件之间出现不一致的行为,请检查他们是否都使用resourceResolver#map
映射了网址,如果Externalizer尚未涵盖这些网址。