Sling中选择器的用途是什么?
http://www.resourcePath.选择器 .extension
我在线阅读了有关选择器用法的文档:
一些文档说它用于缓存页面的响应,这在使用查询参数时是无法完成的.
有些人建议选择器用于使用相同的资源响应不同的条件.例如,我们有一个实现,如果页面(cq:page)是层次结构中的最后一页,它应该显示让我们说一个html块,而如果它不是最后一页(即如果它有子页面),它应该不显示所述块.这里我们在组件中使用了一个脚本,并根据条件在URL中将此脚本名称添加为选择器,无论它是否是最后一页.
但我不确定哪一个是真的.
提前感谢任何指导.
Imr*_*eed 10
选择器是URL的一种特殊形式的参数.就像查询字符串一样,它可以根据参数更改HTTP请求/响应的行为.
这些主要取决于实现,但一般惯例是根据位置解释它们.
好的简单例子是tree.json
tree.1.json(1是深度选择器)只是说tree.json?depth = 1的另一种方式
类似tree.2.json是tree.json?depth = 2
从语义上讲,这允许路径在没有查询字符串的情况下是绝对的,并且可以由调度程序或CDN缓存(因为它们没有?或#modifiers).大多数代理不缓存参数化页面(URL中的?),但选择器适用于规则.此外,这允许servlet预定义选择器值(如果需要)并忽略不必要的参数.
鉴于上述情况,这里是对您的问题的直接回复(编辑后):
一些文档说它用于缓存页面的响应,这在使用查询参数时是无法完成的.
是的,这是真的,特别是如果你把它放在反向代理的上下文中,比如Dispatcher(在典型的AEM部署中推荐给发布者).默认情况下,查询字符串绕过并刷新调度程序上的缓存.通过使用选择器,您可以将响应缓存在调度程序上,因为它不会启动缓存刷新.如果可以缓存基本版本的数据并且选择器依赖于相同的状态,则使用选择器通常是一种很好的做法.
有些人建议选择器用于使用相同的资源响应不同的条件.例如,我们有一个实现,如果页面(cq:page)是层次结构中的最后一页,它应该显示让我们说一个html块,而如果它不是最后一页(即如果它有子页面),它应该不显示所述块.这里我们在组件中使用了一个脚本,并根据条件在URL中将此脚本名称添加为选择器,无论它是否是最后一页.
没有看代码,我假设这是这样的:
page.last-page.html
last-page您用于区分响应的选择器在哪里.这是一种方法,只要页面可以缓存,也可以缓存此选择器变体而不会出现任何问题.这很好地利用了URL语义并避免了缓存问题.如果这被实现为:
page.html?last-page=true
它可能不是缓存友好的.
Sling有各种方法将脚本或servlet绑定(解析)到URL.该分辨率基于扩展,选择器和/或路径完成.您可以通过创建基于选择器的新servlet来向现有选择器或扩展添加新功能,而无需修改现有servlet.考虑一个示例servlet,它返回路径的JSON数据(我们知道这在AEM中存在OOTB,但只是一个例子).
content/mypage.json
返回节点的JSON表示.
现在,假设您想要一种更整洁的新JSON格式.使用传统查询字符串,您将执行类似的操作
content/mypage.json?tidy=true
如果您无法访问原始servlet的源代码,则可能无法执行此操作.所以解决方法是:
content/mypage.tidy.json
这可能是一个新的servlet,它接受tidy选择器并覆盖函数.这使得选择器在脚本解析和代码扩展方面变得强大.是的,您也可以使用查询参数来执行此操作,但除非您拥有所有代码,否则会有限制.
| 归档时间: |
|
| 查看次数: |
5336 次 |
| 最近记录: |