You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 16:27:34