如何在aem 6.3中使用sling模型获取页面属性?

时间:2018-01-03 14:34:41

标签: sling-models

我正在尝试使用AEM 6.3中的Sling Models获取页面属性,但总是得到null。

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

财产路径:

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

您能否告诉我使用Sling Models获取物业价值的正确途径?

4 个答案:

答案 0 :(得分:0)

在模型类中,您可以创建如下字段:

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

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

答案 1 :(得分:0)

您也可以这样做:

@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/

答案 2 :(得分:0)

要利用injector specific annotation,更好的方法是:

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

  public String getResultsRootPath(){ return ResultsRootPath; }
}

要提及的是,请使用驼峰式大小写作为resultRootPath中的属性。

答案 3 :(得分:0)

这些其他选项的替代方法,但可能更简单。 模型知道@Model部分中基于SlingHttpServletRequest的页面是什么

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

    @Inject
    private Page currentPage;

@Inject私有页面currentPage将自动获取页面,并允许您访问所有属性等。