Aem 如何从sling资源中获取选择器
我有两种吊索型号:Aem 如何从sling资源中获取选择器,aem,sling,sightly,htl,Aem,Sling,Sightly,Htl,我有两种吊索型号: @Model(adaptables = {SlingHttpServletRequest.class, Resource.class}, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL) public class VideoGridItem { @SlingObject private Resource resource; @SlingObject private SlingHttp
@Model(adaptables = {SlingHttpServletRequest.class, Resource.class}, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL)
public class VideoGridItem {
@SlingObject
private Resource resource;
@SlingObject
private SlingHttpServletRequest slingHttpServletRequest;
@PostConstruct
public void initVideoGridItem() {
String[] selectors = slingHttpServletRequest.getRequestPathInfo().getSelectors();
insideGrid = selectors == null || selectors.length == 0 ? false : Arrays.stream(selectors).anyMatch("grid"::equals);
url = URLUtils.addHTMLIfPage(resource.getResourceResolver(), linkUrl);
}
}
及
@Model(adaptables=SlingHttpServletRequest.class,defaultInjectionStrategy=defaultInjectionStrategy.OPTIONAL)
公开课视频列表{
私有列表路径;
@施工后
最终void init(){
}
}
我使用HTL从视频列表组件调用VideoGridItem组件(技术上是引用模型的资源):
<sly data-sly-list.videoResourcePath="${model.videoResourcePaths}">
<sly data-sly-resource="${videoResourcePath @ wcmmode='disabled', addSelectors='grid'}" data-sly-unwrap="true"></sly>
</sly>
现在,当我调试代码时,在initVideoGridItem内部,slingHttpServletRequest为null。公平地说,这个资源没有被直接请求,但我仍然需要能够访问选择器“网格”。有没有办法从VideoGridItem.resource中执行此操作
资源
和slingHttpServletRequest
字段,使用@org.apache.sling.models.annotations.injectorspecific.Self
注释代替@SlingObject
。自注入器将注入自适应对象本身(即Sling请求)以及可从同一对象(资源)进行自适应的对象@Model
注释中的可适应类型列表中删除Resource.class
。这将防止模型类从资源
对象进行调整,这将导致slingHttpServletRequest
字段为null,并且@PostConstruct
方法将抛出NullPointerException
很抱歉,我没有尽快回复,但我发现了自己的缺陷,继续前进。问题是,我是通过从代码中另一个地方的资源修改来创建VideoGridItem的,当然Sling无法插入请求。我现在正在考虑空请求,我的代码运行良好。谢谢你的回答 共享您的VideoGridItem组件htl代码
<sly data-sly-list.videoResourcePath="${model.videoResourcePaths}">
<sly data-sly-resource="${videoResourcePath @ wcmmode='disabled', addSelectors='grid'}" data-sly-unwrap="true"></sly>
</sly>