gpt4 book ai didi

aem - AEM 中的选择器

转载 作者:行者123 更新时间:2023-12-02 19:47:51 25 4
gpt4 key购买 nike

Sling 中选择器有什么用?

http://www.resourcePath .选择器.扩展名

我看过网上关于选择器使用的文档:

  1. 一些文档说它用于缓存页面的响应,而使用查询参数时无法做到这一点。

  2. 虽然有些人建议选择器用于使用相同的资源响应不同的条件。例如,我们有一个实现,如果页面(cq:page)是层次结构中的最后一个页面,它应该显示一个html block ,而如果它不是最后一个页面(即,如果它有子页面),它应该显示不显示该 block 。这里我们在组件中使用了一个脚本,并根据是否是最后一页的条件在 URL 中添加了这个脚本名称作为选择器。

但我不确定哪一个是真的。

预先感谢您的任何指导。

最佳答案

选择器是 URL 参数的一种特殊形式。就像查询字符串一样,它可以根据参数更改 HTTP 请求/响应的行为。

这些大多依赖于实现,但一般惯例是根据位置解释它们。

tree.json 是一个很好的简单示例

tree.1.json(1是深度选择器)只是tree.json的另一种表达方式?深度=1

类似地,tree.2.json 是一种 tree.json?depth=2

从语义上讲,这允许没有查询字符串的绝对路径,并且可以由调度程序或 CDN 缓存(因为它们没有 ? 或 # 修饰符)。大多数代理不会缓存参数化页面(URL 中的?),但选择器会围绕该规则工作。此外,这还允许 servlet 预定义选择器值(如果需要)并忽略不必要的参数。

鉴于上述情况,以下是对您的问题的直接答复(帖子编辑):

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 绑定(bind)(解析)到 URL 的方法。该解析是根据扩展名、选择器和/或路径完成的。您可以通过创建基于新选择器的 servlet 来向现有选择器或扩展添加新功能,而无需修改现有 servlet。考虑一个示例 servlet,它返回路径的 JSON 数据(我们知道 AEM 中存在 OOTB,但这只是一个示例)。

content/mypage.json

返回节点的 JSON 表示形式。

现在,假设您想要一种更整洁的新 JSON 格式。使用传统查询字符串,您将执行类似的操作

content/mypage.json?tidy=true

如果您无权访问原始 servlet 的源代码,这可能是不可能的。所以解决方法是:

content/mypage.tidy.json

这可能是一个新的 servlet,它接受 tidy 选择器并覆盖该函数。这使得选择器在脚本解析和代码扩展方面变得强大。是的,您也可以使用查询参数来完成此操作,但除非您拥有所有代码,否则会有限制。

关于aem - AEM 中的选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42853265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com