AEM 中的选择器
Selectors in AEM
Sling 中的选择器有什么用?
http://www.resourcePath.选择器.扩展名
我看过网上关于选择器用法的文档:
一些文档说它用于缓存来自页面的响应,这在使用查询参数时无法完成。
虽然有人建议选择器用于使用相同资源响应不同条件。例如,我们有一个实现,如果页面(cq:page)是层次结构中的最后一页,它应该显示一个 html 块,而如果它不是最后一页(即如果它有子页面) ), 它不应显示所述块。这里我们在组件中使用了一个脚本,根据是否是最后一页的条件,在URL中添加了这个脚本名称作为选择器。
但我不确定哪一个是真的。
在此先感谢您的指导。
选择器是 URL 的一种特殊形式的参数。就像查询字符串一样,它可以根据参数更改 HTTP request/response 的行为。
这些主要取决于实现,但一般惯例是根据位置来解释它们。
好的简单示例将是 tree.json
tree.1.json(1是深度选择器)
只是 tree.json?depth=1
的另一种说法
类似树。2.json 是一种 tree.json?depth=2
从语义上讲,这允许没有查询字符串的绝对路径,并且可以由调度程序或 CDN 缓存(因为它们没有 ? 或 # 修饰符)。大多数代理不缓存参数化页面(?在 URL 中)但选择器绕过规则。此外,这允许 servlet 预定义选择器值(如果需要)并忽略不必要的参数。
鉴于以上,这里直接回答你的问题(post编辑):
Some of the documents say that it is used for caching response from a page which cannot be done when using query parameters.
是的,这是真的,特别是如果您将它放在像 Dispatcher 这样的反向代理的上下文中(推荐用于典型 AEM 部署中的发布者)。默认情况下,查询字符串绕过并刷新调度程序上的缓存。通过使用选择器,您可以在调度程序上缓存响应,因为它不会启动缓存刷新。如果可以缓存基本版本的数据并且选择器依赖于相同的状态,那么使用选择器通常是一个好习惯。
While some suggest that Selectors are used to respond to different conditions using the same resource. For example we had an implementation where if the page(cq:page) is the last page in the hierarchy, it should display lets say a html-block while if its not the last page (i.e. if it has child pages), it should not display the said block. Here we used a script in the component and added this script name in the URL as selector based on the condition whether it is the last page or not.
不看代码,我假设这是这样的:
page.last-page.html
其中 last-page
是您用来区分响应的选择器。这是一种实现方法,只要页面可以缓存,这个选择器变体也可以毫无问题地缓存。这是对 URL 语义的一个很好的使用,避免了缓存问题。如果实现为:
page.html?last-page=true
它可能不是缓存友好的。
Sling 有多种方法可以将脚本或 servlet 绑定(解析)到 URL。此解决方案是根据扩展、选择器 and/or 路径完成的。您可以通过创建新的基于选择器的 servlet 而无需修改现有的 servlet 来向现有的选择器或扩展添加新功能。考虑一个示例 servlet,其中 returns JSON 路径数据(我们知道这在 AEM 中存在 OOTB,但这只是一个示例)。
content/mypage.json
returns JSON 节点表示。
现在,假设您想要一种更整洁的新 JSON 格式。使用传统查询字符串,您将执行类似
content/mypage.json?tidy=true
如果您无法访问原始 servlet 的源代码,这可能无法实现。所以解决方法是:
content/mypage.tidy.json
这可能是一个新的 servlet,它接受 tidy
选择器并覆盖该函数。这使得选择器在脚本解析和代码扩展方面非常强大。是的,您也可以使用查询参数来完成,但除非您拥有所有代码,否则会有限制。
Sling 中的选择器有什么用?
http://www.resourcePath.选择器.扩展名
我看过网上关于选择器用法的文档:
一些文档说它用于缓存来自页面的响应,这在使用查询参数时无法完成。
虽然有人建议选择器用于使用相同资源响应不同条件。例如,我们有一个实现,如果页面(cq:page)是层次结构中的最后一页,它应该显示一个 html 块,而如果它不是最后一页(即如果它有子页面) ), 它不应显示所述块。这里我们在组件中使用了一个脚本,根据是否是最后一页的条件,在URL中添加了这个脚本名称作为选择器。
但我不确定哪一个是真的。
在此先感谢您的指导。
选择器是 URL 的一种特殊形式的参数。就像查询字符串一样,它可以根据参数更改 HTTP request/response 的行为。
这些主要取决于实现,但一般惯例是根据位置来解释它们。
好的简单示例将是 tree.json
tree.1.json(1是深度选择器) 只是 tree.json?depth=1
的另一种说法类似树。2.json 是一种 tree.json?depth=2
从语义上讲,这允许没有查询字符串的绝对路径,并且可以由调度程序或 CDN 缓存(因为它们没有 ? 或 # 修饰符)。大多数代理不缓存参数化页面(?在 URL 中)但选择器绕过规则。此外,这允许 servlet 预定义选择器值(如果需要)并忽略不必要的参数。
鉴于以上,这里直接回答你的问题(post编辑):
Some of the documents say that it is used for caching response from a page which cannot be done when using query parameters.
是的,这是真的,特别是如果您将它放在像 Dispatcher 这样的反向代理的上下文中(推荐用于典型 AEM 部署中的发布者)。默认情况下,查询字符串绕过并刷新调度程序上的缓存。通过使用选择器,您可以在调度程序上缓存响应,因为它不会启动缓存刷新。如果可以缓存基本版本的数据并且选择器依赖于相同的状态,那么使用选择器通常是一个好习惯。
While some suggest that Selectors are used to respond to different conditions using the same resource. For example we had an implementation where if the page(cq:page) is the last page in the hierarchy, it should display lets say a html-block while if its not the last page (i.e. if it has child pages), it should not display the said block. Here we used a script in the component and added this script name in the URL as selector based on the condition whether it is the last page or not.
不看代码,我假设这是这样的:
page.last-page.html
其中 last-page
是您用来区分响应的选择器。这是一种实现方法,只要页面可以缓存,这个选择器变体也可以毫无问题地缓存。这是对 URL 语义的一个很好的使用,避免了缓存问题。如果实现为:
page.html?last-page=true
它可能不是缓存友好的。
Sling 有多种方法可以将脚本或 servlet 绑定(解析)到 URL。此解决方案是根据扩展、选择器 and/or 路径完成的。您可以通过创建新的基于选择器的 servlet 而无需修改现有的 servlet 来向现有的选择器或扩展添加新功能。考虑一个示例 servlet,其中 returns JSON 路径数据(我们知道这在 AEM 中存在 OOTB,但这只是一个示例)。
content/mypage.json
returns JSON 节点表示。
现在,假设您想要一种更整洁的新 JSON 格式。使用传统查询字符串,您将执行类似
content/mypage.json?tidy=true
如果您无法访问原始 servlet 的源代码,这可能无法实现。所以解决方法是:
content/mypage.tidy.json
这可能是一个新的 servlet,它接受 tidy
选择器并覆盖该函数。这使得选择器在脚本解析和代码扩展方面非常强大。是的,您也可以使用查询参数来完成,但除非您拥有所有代码,否则会有限制。