如何获取Sightly列表的大小?常规方法无效,求Java USE-API指导
解决Sightly(HTL)中获取嵌套列表总数量的问题
我明白你在嵌套HTL列表里获取子项总数量时遇到的麻烦——那些直接调用size的方法确实行不通,因为HTL的迭代对象和Sling Resource的API设计本来就不支持直接拿集合大小。下面我给你一步步讲怎么用Java USE-API解决这个问题:
1. 创建Java USE-API Helper类
首先我们需要写一个简单的Java类,用来封装获取Resource子项数量的逻辑。这个类可以放在你的AEM项目的核心代码包下(比如com.yourproject.core.helpers):
package com.yourproject.core.helpers; import org.apache.sling.api.resource.Resource; import java.util.Iterator; public class ResourceChildCountHelper { // 接收一个Resource对象,返回它的子资源数量 public int getChildrenCount(Resource resource) { if (resource == null) { return 0; } Iterator<Resource> childrenIterator = resource.listChildren(); int count = 0; // 遍历迭代器统计数量 while (childrenIterator.hasNext()) { count++; childrenIterator.next(); } return count; } }
2. 在HTL中调用这个Helper类
接下来在你的HTL文件里,先引入这个Helper类,然后在嵌套列表中调用它的方法来获取当前item的子项总数量:
<!-- 引入自定义的Helper类 --> <sly data-sly-use.childCountHelper="com.yourproject.core.helpers.ResourceChildCountHelper"/> <!-- 外层遍历父资源的子项 --> <sly data-sly-list.parentItem="${resource.listChildren}"> <!-- 内层遍历当前父项的子项 --> <sly data-sly-list.childItem="${parentItem.listChildren}"> <!-- 显示当前项的索引 / 总数量 --> ${childItemList.count} / ${childCountHelper.getChildrenCount(parentItem)} </sly> </sly>
为什么之前的方法无效?
简单解释下你尝试过的方法为什么不生效:
resource.size/item.size:Sling的Resource对象本身没有size()方法,自然调用失败itemList.size:HTL的itemList是迭代器包装对象,它只提供count(当前迭代的索引)、first/last等状态属性,没有size属性resource.listChildren.size:listChildren()返回的是Iterable<Resource>,不是Java集合类(比如List),所以没有size()方法
内容的提问来源于stack exchange,提问作者Wulala2006
相关产品推荐
相关产品推荐

