1

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

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

财产路径:

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

您能否让我知道使用 Sling Models 评估财产价值的正确方法?

4

4 回答 4

1

你也可以这样做:

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

于 2018-09-08T08:04:41.240 回答
0

这些其他选项的替代方案,但可能更简单。模型根据@Model 部分中的 SlingHttpServletRequest 知道它们所在的页面

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

    @Inject
    private Page currentPage;

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

于 2020-04-08T22:19:27.563 回答
0

要利用注入器特定的注释,更好的方法是:

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

  public String getResultsRootPath(){ return ResultsRootPath; }
}

值得一提的是,对于 resultsRootPath 中的属性,请使用驼峰式大小写。

于 2019-03-27T15:49:30.233 回答
0

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

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

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

或者

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

    @Inject
    @Via("resource")
    @Named("ResultsRootPath")
    private Resource resultsRootPath;
}
于 2018-03-26T10:44:01.173 回答