如何在组件级别访问URL选择器

时间:2019-01-31 09:33:31

标签: aem

方案:(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”),其中没有选择器。

2 个答案:

答案 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实例(相同版本)上检查了完全相同的组件/代码,它就可以工作...将检查是什么导致了错误的行为,但我想问题已经解决了!