Как получить доступ к селектору URL на уровне компонентов - PullRequest
0 голосов
/ 31 января 2019

Сценарий: (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 "request" ...), но всегда получаю одну и ту же проблему: "запрос", к которому я могу получить доступ, - это GETзапрос компонента (GET "/content/myapp/home/jcr:content/parsys/slider.html"), в котором селектор отсутствует.

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Только что проверил тот же самый компонент / код на другом экземпляре AEM (той же версии), и он работает ... проверит, что может быть причиной неправильного поведения, но я думаю, что проблема решена!

0 голосов
/ 31 января 2019

Вам следует использовать метод SlingHttpServletRequest##getPathInfo, унаследованный от HttpServletRequest

В вашем примере, если вы делаете запрос на:

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>

Anчто будет выводить: (на основе вашего примера пути)

<div>test1</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...