首页 > 解决方案 > 如何在组件级别访问 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") 选择器不存在的地方。

标签: aem

解决方案


您应该使用从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>

推荐阅读