java - 检查 Richtext 是否有附件

标签 java xpages

这很奇怪——或者说并不奇怪,因为 Richtext 总的来说就是个 SCSS 。我想跟踪文档(或富文本项目)是否有附件或不在我的后端文档中设置其他字段。我创建了一个静态 Java 方法来计算这些内容。该方法是从我的数据源的 postSaveDocument 事件调用的。 方法是这样的:

/**
     * Set flag fields if attachments exist or not
     * 
     * @param xspdoc
     */
    public static void setAttachments(final Document doc, final boolean post) {
        try {
            if (doc.hasItem("audioFile")) {
                doc.replaceItemValue("audioHasFile", "1");
            } else {
                doc.removeItem("audioHasFile");
            }
            if (doc.hasItem("audioCase")) {
                doc.replaceItemValue("audioHasCase", "1");
            } else {
                doc.removeItem("audioHasCase");
            }
            if (doc.hasItem("audioTrackliste")) {
                doc.replaceItemValue("audioHasTrackliste", "1");
            } else {
                doc.removeItem("audioHasTrackliste");
            }
            if (post)
                doc.save();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

问题是:每次我向 Xpage 上的 RTF 项目之一添加附件(通过 Fileupload 控件)时,都会使用简单的操作保存文档,该项目例如“audioHasFile”设置为“1”。贝尼!

如果我随后重新打开文档,删除附件(通过 Filedownload 控件垃圾桶图标)并再次保存文档,后端将无法识别附件已消失,并且该项目例如“audioHasFile”未删除,但仍保留之前设置的值“1”。

仅当在我的 Xpage 中重新打开文档(从 View 面板)并再次保存时,该字段才会被删除,因为后端现在识别出没有附件。

我知道您在想什么:缺少附件并不意味着没有对应的项目 - 错误!我还尝试通过 getType == 1 (Item.ATTACHMENT) 检查 Richtext 项目的类型 - 没有运气。

信息:我通过 currentDocument.getDocument(true) 传递 Document 参数 - 所以我在这里处理同步的后端文档。

需要明确的是:这不是一个一般的测试问题,而是一个时间问题。

知道如何解决这个问题吗?先感谢您! :)

更新:这是有效的解决方案:

/**
     * Set flag fields if attachments exist or not
     * 
     * @param xspdoc
     */
    public static void setAttachments(final DominoDocument doc) {

        try {
            doc.replaceItemValue("audioHasFile", doc.getAttachmentList("audioFile").size() > 0 ? "1" : "");         
            doc.replaceItemValue("audioHasTrackliste", doc.getAttachmentList("audioTrackliste").size() > 0 ? "1" : "");
            doc.replaceItemValue("audioHasCase", doc.getAttachmentList("audioCase").size() > 0 ? "1" : "");
            // key
            doc.replaceItemValue("audioKey", doc.getItemValueString("audioTitle").toLowerCase().replaceAll("\\s+",""));

            doc.save();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

最佳答案

尝试将您的文档包装在 NotesXspDocument 中:

        NotesXspDocument xspDoc;
        xspDoc = com.ibm.xsp.model.domino.wrapped.DominoDocument.wrap(doc.getParentDatabase().getFilePath(), doc, null, null, false, null); 
        if (xspDoc.getAttachmentList("FieldName").size() > 0){
            //
        }

关于java - 检查 Richtext 是否有附件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28200382/

相关文章:

java - 使用枚举变量切换字符串

java - XPage:在部分刷新的自定义控件中丢失变量

java - 如果键列后面有分类列,getAllDocumentsByKey 是否可以在 Lotus domino 中工作?

xpages - 搜索 View 时没有结果时显示消息

xpages - XPage 上存在多个 IFrame 时无法设置 sessionScope 变量

javascript - XPage 和加载 JavaScript 文件

java - 仅适用于 kotlin 的自定义 Android Lint(无 java)

java - jackson 序列号 : Unwrap collection elements using

java - 默认 Iterable 加上其他 Iterable

ubuntu 中的 Java tzupdater + IANA 问题