aem - 如何在组件级别访问 URL 选择器
问题描述
场景:(AEM 6.3.2)我正在请求一个带有选择器“test1”的页面,如下所示: http://localhost:4502/content/myapp/home.test1.html
此页面有一个 parsys,我在其中放置了一个组件“滑块”,因此该组件的路径是:“/content/myapp/home/jcr:content/parsys/slider”
在“滑块”组件级别,如何访问“test1”选择器?
我尝试了不同的方法(SlingModel、WCMUsePojo、“请求”HTL 全局对象......),但总是遇到同样的问题:我可以访问的“请求”是组件的 GET 请求(GET“/content/ myapp/home/jcr:content/parsys/slider.html") 选择器不存在的地方。
解决方案
您应该使用从HttpServletRequestSlingHttpServletRequest##getPathInfo
继承的方法
在您的示例中,如果您请求:
http://localhost:4502/content/myapp/home.test1.html
然后在您的组件的类 (Use/SlingModel) 中,您可以调用request.getPathInfo()
它将返回:/content/myapp/home.test1.html
然后你可以使用解析该路径:com.day.cq.commons.PathInfo
这是一个示例吊索模型:
package com.mycom.core.models;
import com.day.cq.commons.PathInfo;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.models.annotations.DefaultInjectionStrategy;
import org.apache.sling.models.annotations.Model;
import org.apache.sling.models.annotations.injectorspecific.Self;
@Model(adaptables = SlingHttpServletRequest.class,
defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL)
public class SampleModel {
@Self
SlingHttpServletRequest request;
public PathInfo getPathInfo() {
return new PathInfo(request.getPathInfo());
}
}
然后在您的 HTML 中,您可以执行以下操作:
<sly data-sly-use.sample="com.mycom.core.models.SampleModel"/>
<div>${sample.pathInfo.selectors @ join=', '}</div>
一个将输出:(基于您的示例路径)
<div>test1</div>
推荐阅读
- wordpress - 在 Sage 上找不到与模式 .s?(c|a)ss" 匹配的文件
- python - 同时实现两个内部 Python 类型
- ffmpeg - 如何使用 ffmpeg 从 ts 中提取“GROUP-ID”、“LANGUAGE”和“INSTREAM-ID”
- docker - 两个 .net 核心容器之间的通信
- json - 解组具有多个 json 对象的 json 文件(无效的 json 文件)
- jupyter-notebook - Ipyvuetify 多选功能不起作用
- c++ - malloc什么时候不调用mmap?
- javascript - 如果我观看解构的道具,Vue 3 手表将不起作用
- reactjs - paddingTop: Platform.OS === "android" ? 状态栏.currentHeight:0,
- android - 没有带 3 行图标的 draywerLayout