OpenCms与JSTL自定义contentload:按日期降序列表文件问题求助
问题描述
刚接触OpenCms与JSTL,需要列出带有"data"属性字段的文件,尝试了以下代码:
<c:forEach items="<%=folderFilesList%>" var="folderFile" varStatus="counterFile"> <c:set var="fileName">${fn:toLowerCase(folderFile.getName())}</c:set> <c:set var="fileUri">${fn:replace(folderFile.getRootPath(),'/sites/default','')}</c:set> <c:set var="fileDate"><cms:property name="data" file="${fileUri}"/></c:set> <c:if test="${folderFile.getTypeId() == 4000}"> <cms:contentload collector="singleFile" param="${fileDate}" pageIndex="${page}" pageSize="${pagesize}" editable="false">
但未得到预期结果,报错提示无法访问资源或参数为空(尽管已正确设置)。由于无法直接在平台调试,请问如何实现资源读取并按日期降序列出文件?
解决方案
1. 修复资源属性读取逻辑
你的代码存在两个核心问题:
- 混合Java脚本变量
<%=folderFilesList%>与JSTL标签,容易引发上下文冲突,建议统一使用OpenCms原生标签处理资源。 <cms:property>获取属性时,无需手动替换根路径,直接传入folderFile(需为CmsResource实例)即可:<c:set var="fileDate"><cms:property name="data" resource="${folderFile}" /></c:set>
2. 用OpenCms Collector高效筛选排序
无需手动遍历所有文件,直接通过cms:contentload标签筛选带data属性的资源并排序,这是OpenCms推荐的做法:
<cms:contentload collector="allInFolder" param="/你的目标文件夹路径|typeId:4000|property:data" sortBy="data" sortOrder="desc" pageIndex="${page}" pageSize="${pagesize}" editable="false"> <!-- 输出资源信息 --> <div> 名称:${cms:resource().getName()} 日期:<cms:property name="data" resource="${cms:resource()}" /> 路径:${cms:resource().getRootPath()} </div> </cms:contentload>
参数说明:
collector="allInFolder":遍历指定文件夹下的所有资源param:用|分隔条件,依次为目标文件夹、资源类型ID(4000)、存在data属性sortBy="data":按data属性排序sortOrder="desc":降序排列
3. 过滤属性为空的资源
如果部分资源的data属性可能为空,添加判断过滤:
<cms:contentload collector="allInFolder" param="/你的目标文件夹路径|typeId:4000" pageIndex="${page}" pageSize="${pagesize}" editable="false"> <c:set var="fileDate"><cms:property name="data" resource="${cms:resource()}" default="" /></c:set> <c:if test="${not empty fileDate}"> <p>${cms:resource().getName()} - ${fileDate}</p> </c:if> </cms:contentload>
4. 无调试环境下的验证方法
- 在页面输出关键变量,确认数据是否正确:
<c:out value="资源对象:${folderFile}" /> <c:out value="data属性值:${fileDate}" /> - 确保
data属性是标准可排序日期格式(如yyyy-MM-dd HH:mm:ss),否则排序会失效。
内容的提问来源于stack exchange,提问作者Numero 21
相关产品推荐
相关产品推荐

