如何在收件箱widget的每个文件夹下方展示发件人邮箱、日期等属性
实现方案
1. 封装邮件信息数据类
你当前的displayedFolders仅存储了文件名字符串,无法承载发件人、日期等额外字段,首先定义专用POJO类存储展示所需的所有字段:
// 无Lombok可自行编写Getter/Setter @Data public class DisplayedMailItem { private String folderName; // 所属文件夹名称 private String mailTitle; // 原grandChild.getName()对应内容 private String senderEmail; // 发件人邮箱 private Date sendDate; // 邮件发送日期 }
2. 调整Java端逻辑
从CMIS对象的属性中取出你需要的发件人、日期字段(注意替换为你实际CMIS服务对应的属性key),同时修复现有isEmpty字段的逻辑错误:
private void initDisplayedFolders() { displayedFolders = new ArrayList<>(); // 初始化空状态为true,有数据再更新 isEmpty = true; for (final CmisObject child : inboxFolder.getChildren()) { if (displayedFolders.size() >= NUMBER_OF_FOLDERS_TO_DISPLAY) { break; } if (child instanceof Folder) { final Folder childFolder = (Folder) child; String currentFolderName = childFolder.getName(); for (final CmisObject grandChild : childFolder.getChildren()) { if (displayedFolders.size() >= NUMBER_OF_FOLDERS_TO_DISPLAY) { break; } DisplayedMailItem item = new DisplayedMailItem(); item.setFolderName(currentFolderName); item.setMailTitle(grandChild.getName()); // 替换为你CMIS服务中发件人对应的属性key item.setSenderEmail(String.valueOf(grandChild.getPropertyValue("custom:senderEmail"))); // 替换为你CMIS服务中发送日期对应的属性key item.setSendDate((Date) grandChild.getPropertyValue("custom:sendDate")); displayedFolders.add(item); } } } // 修正空状态逻辑:列表非空时isEmpty设为false if (!displayedFolders.isEmpty()) { isEmpty = false; } }
3. 调整前端模板展示
修改模板读取对象字段,新增发件人和日期的展示节点:
<div children="@bind(vm.displayedFolders)" if="${!vm.isEmpty}"> <template name="children" var="mailItem"> <div class="inbox-widget-item"> <label value="${mailItem.mailTitle}" sclass="inbox-widget-label"/> <!-- 下方展示元信息,可通过CSS控制样式 --> <div class="inbox-widget-meta"> <span sclass="inbox-sender">${mailItem.senderEmail}</span> <span sclass="inbox-date">${fmt:formatDate(mailItem.sendDate, 'yyyy-MM-dd HH:mm')}</span> </div> </div> </template> </div>
注:日期格式化可根据你使用的前端框架替换对应语法,上述为ZK框架的常用写法。
优化建议
- CMIS查询优化:嵌套调用
getChildren()在CMIS是远程请求时性能极低,建议改用CMIS查询语句一次性拉取所有需要的文档和属性,减少IO次数。 - 空值防护:读取CMIS属性时增加空判断,避免属性不存在时抛出空指针异常,可设置默认兜底值比如
未知发件人。 - 排序逻辑补充:现有逻辑取CMIS默认返回顺序,建议新增按发送日期倒序排列的逻辑,最新邮件展示在最前更符合收件箱使用习惯。
- 状态变量优化:原
isEmpty变量的命名和初始逻辑完全相反,容易引发后续维护问题,建议统一逻辑和命名含义。
内容的提问来源于stack exchange,提问作者GetsugaTensho
相关产品推荐
相关产品推荐

