方案:(AEM 6.3.2)我正在请求带有选择器“ test1”的页面,如下所示: http://localhost:4502/content/myapp/home.test1.html
此页面上有一个parsys,在其中放置了一个组件“ slider”,因此该组件的路径为:“ / content / myapp / home / jcr:content / parsys / slider”
在“滑块”组件级别,如何访问“ test1”选择器?
我尝试了不同的方式(SlingModel,WCMUsePojo,“请求” HTL全局对象...),但总是遇到相同的问题:我可以访问的“请求”是组件的GET请求(获取“ /content/myapp/home/jcr:content/parsys/slider.html”),其中没有选择器。
答案 0 :(得分:1)
您应该使用从HttpServletRequest继承的方法SlingHttpServletRequest##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>
答案 1 :(得分:0)
只需在另一个AEM实例(相同版本)上检查了完全相同的组件/代码,它就可以工作...将检查是什么导致了错误的行为,但我想问题已经解决了!