我正在尝试使用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获取物业价值的正确途径?
答案 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将自动获取页面,并允许您访问所有属性等。