jsp - 使用c :forEach over sling:listChildren

标签 jsp taglib aem sling

我有以下代码:

<c:set var="res" value="${sling:getResource(resourceResolver, currentPage.path)}" />
<sling:listChildren resource="${res}" var="children" />
${children} length ${fn:length(children)}
<c:forEach var="child" items="${children}">
     <li>here${child.path}</li>
</c:forEach>

我的目标是吐出当前页面的三个子元素。当我打印出${children}时,我获得对迭代器 ( org.apache.sling.resourceresolver.impl.helper.ResourceIteratorDecorator@3b93b521 ) 的对象引用,长度返回 3。问题是我无法进入循环。根据sling taglibs docs ,这个forEach应该能够处理迭代器对象。我有什么遗漏的吗? findResources函数还返回 ResourceIteratorDecorator当它应该是一个普通的java.util.Iterator时.

我确实找到了ResourceIteratorDecorator class它延伸Iterator<Resource> ,所以类本身应该不是问题。是c:forEach已知迭代器对象有问题?

最佳答案

尝试取消长度检查并允许 forEach 运行。

为了让 length 函数计算出迭代器中包含多少项,它必须在迭代器上调用 next() 直到到达末尾。无法倒回迭代器,因此当您到达 forEach 时,已经没有剩余项目了。

如果您需要知道长度,可以使用 varStatus 对象:

<c:forEach var="child" items="${children}" varStatus="status">
     <li>${status.index} here${child.path}</li>
</c:forEach>

您使用的 Sling 版本比我新,但如果我将 ResourceResolver.listChildren 的结果输入 c:forEach 而不使用 ${fn:length( child )}

关于jsp - 使用c :forEach over sling:listChildren,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18707024/

相关文章:

spring - 访问 Scriptlet 中的模型属性

grails - 将值注入(inject)内部标签

c++ - 将预编译库复制到构建目录或将它们添加到 QBS 项目中的 PATH

java - com.adobe.aem.commons.assetshare.component 无法解析

Jackrabbit 锁定了许多空位 ACE

aem - JCR中的附加文件

java - Servlet - java.lang.IllegalStateException : getWriter() has already been called for this response

javascript - java.lang.NumberFormatException : For input string: "+i+"

javascript - 如何在 Eclipse 中的 JSP 中的 &lt;script&gt; 标记中禁用 Javascript 验证

c# - 使用 taglib-sharp 删除 ID3 标签的所有图片