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

如何在收件箱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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 08:54:08