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

Aem 如何在组件级别访问URL选择器,aem,Aem,场景:(AEM 6.3.2)我请求一个带有选择器“test1”的页面,如下所示: 这个页面有一个parsys,我在其中放置了一个组件“slider”,因此该组件的路径是:“/content/myapp/home/jcr:content/parsys/slider” 在“滑块”组件级别,如何访问“test1”选择器? 我尝试了不同的方法(SlingModel、WCMUsePojo、HTL全局对象的“请求”),但总是遇到相同的问题:我可以访问的“请求”是组件的get请求(get)/content/

场景:(AEM 6.3.2)我请求一个带有选择器“test1”的页面,如下所示:

这个页面有一个parsys,我在其中放置了一个组件“slider”,因此该组件的路径是:“/content/myapp/home/jcr:content/parsys/slider”

在“滑块”组件级别,如何访问“test1”选择器?


我尝试了不同的方法(SlingModel、WCMUsePojo、HTL全局对象的“请求”),但总是遇到相同的问题:我可以访问的“请求”是组件的get请求(get)/content/myapp/home/jcr:content/parsys/slider.html)选择器不存在的地方。

您应该使用继承自的方法
SlingHttpServletRequest##getPathInfo

在您的示例中,如果您请求:

http://localhost:4502/content/myapp/home.test1.html

然后在组件的类中(使用/SlingModel),您可以调用
request.getPathInfo()
,它将返回:
/content/myapp/home.test1.html

然后,您可以使用以下方法解析该路径:

下面是一个示例吊索型号:

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>

${sample.pathInfo.selectors@join=',}
一个将输出:(基于示例路径)

test1

刚刚在另一个AEM实例(同一版本)上检查了完全相同的组件/代码,它正在工作。。。将检查导致错误行为的原因,但我猜问题已经解决了

您使用哪个版本的AEM?版本:AEM 6.3 SP2您尝试过吗?注意:没有任何示例代码,我们只能猜测,这可能只会浪费时间。这有点取决于您在家中如何使用组件。html的resourceType。选择器将向下传递到组件的子组件,除非在此过程中被覆盖/更改。如果通过data sly include设置组件,则基本上删除了选择器,因此要么在该点传递它,要么通过data sly resource包含它,这样应该保留它,并且在slider组件中应该有一个名为test1.html的文件,如果存在选择器,将直接调用该文件,从而避免猜测逻辑
<div>test1</div>