Как получить свойства страницы, используя модель слинга в AEM 6.3?

Я пытаюсь получить свойства страницы, используя Sling Models в AEM 6.3, но всегда получаю ноль.

resultsRootPath = getCurrentPage().getProperties().get("ResultsRootPath", String.class);

Путь собственности:

/components/content/results/cq:dialog/content/items/column/items/ResultsRootPath

Не могли бы вы сообщить мне правильные способы определения стоимости имущества с помощью Sling Models?

5 ответов

Вы также можете сделать это:

@Model(adaptables = {SlingHttpServletRequest.class,Resource.class})
public class MyCustomModel{

    @Inject
    private InheritanceValueMap pageProperties;

    @Inject
    private ValueMap properties;

    @PostConstruct
    public void activate() {
        String pageString = pageProperties.getInherited("myproperty", "default"); //InheritanceValueMap gives pageProperties Value Map and getInherited is used to fetch a particular property.
    }

Обратитесь к этому для получения дополнительной информации: http://blogs.adobe.com/experiencedelivers/experience-management/valuemap-and-his-friend/

Альтернатива этим другим вариантам, но может быть проще. модели знают, на какой странице они основаны, на основе SlingHttpServletRequest в разделе @Model

@Model(
        adaptables = {Resource.class, SlingHttpServletRequest.class, SlingHttpServletResponse.class},
        defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL
)
public class ModelClassName {

    @Inject
    private Page currentPage;

Приватная страница @Inject currentPage автоматически захватит страницу и предоставит вам доступ ко всем свойствам и т. Д.

Чтобы воспользоваться аннотацией для конкретного инжектора, лучшим способом будет:

@Model(adaptables = SlingHttpServletRequest.class)
public class MyModel {
  @ValueMapValue
  private String ResultsRootPath;

  public String getResultsRootPath(){ return ResultsRootPath; }
}

Чтобы упомянуть, пожалуйста, используйте верблюжий чехол для свойств asin ResultsRootPath.

В своем классе модели вы можете создать поле, подобное этому:

@Model(adaptables = Page.class)
public class ResultsPageModel {

    @Inject
    @Via("contentResource")
    @Named("ResultsRootPath")
    private Resource resultsRootPath;
}

@Model(adapables = {Resource.class, SlingHttpServletRequest.class, SlingHttpServletResponse.class},defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL) открытый класс ModelClassName {

      @Inject
private Page currentPage;
Другие вопросы по тегам