【问题标题】:Displaying and editing Rich Text field in XPages在 XPage 中显示和编辑富文本字段
【发布时间】:2017-05-03 18:06:37
【问题描述】:

我想在我的 XPages 应用程序中读取和写入富文本字段。

在我的 Employee 类中,我定义了一个应该包含富文本字段内容的字段,如下所示:

private com.ibm.xsp.http.MimeMultipart comment;

public com.ibm.xsp.http.MimeMultipart getComment() {
    return comment;
}
public void setComment(com.ibm.xsp.http.MimeMultipart comment) {
    this.comment = comment;
}

现在在我的 EmployeeDAO 类中,我想知道如何在 Notes 文档中加载富文本内容并设置注释字段?

我发现以下我认为不是那么“优雅”的方式:

public void loadRT(Document doc){
        MimeMultipart strValue = null;

        try {
            if (doc.hasItem("Body")){
                if (doc.getFirstItem("Body") != null) {
//?? not sure what the type value stands for
                    if (doc.getFirstItem("Body").getType() != 1) {
                        strValue = MimeMultipart.fromHTML(doc.getItemValueString("Body"));
                    } else {
                        RichTextItem rti = (RichTextItem) doc.getFirstItem("Body");
                        if (rti != null) {
                            HttpServletRequest rq = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
                            String curURL = rq.getRequestURL().toString();
                            String docid = doc.getUniversalID();

                            String notesURL = curURL.substring(0, curURL.indexOf(rq.getContextPath()) + 1) + doc.getParentDatabase().getFilePath() + "/0/" + docid + "/" + "Body"
                                    + "?OpenField";

                            URL docURL;
                            try {
                                docURL = new URL(notesURL);
                                URLConnection uc = docURL.openConnection();
                                uc.setRequestProperty("Cookie", rq.getHeader("Cookie"));
                                uc.connect();

                                // do the HTTP request
                                BufferedReader in = new BufferedReader(new InputStreamReader(uc.getInputStream(), "UTF-8"));

                                // process the data returned
                                StringBuffer strBuf = new StringBuffer();
                                String tmpStr = "";
                                while ((tmpStr = in.readLine()) != null) {
                                    strBuf.append(tmpStr);
                                }

                                strValue = MimeMultipart.fromHTML(strBuf.toString());
                                employee.setComment(strValue);


                            } catch (MalformedURLException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                        }
                    }
                }

            }
        } catch (NotesException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

在我的 xpage 中,我可以将其绑定到 xp:inputRichText 控件,如下所示:

<xp:inputRichText id="inputRichText1"
                value="#{employeeBean.employee.comment}" style="height:400px"
                readonly="#{employeeBean.employee.editable eq false}">
            </xp:inputRichText>

到目前为止,我还没有了解如何将富文本控件调整到其内容的大小,也没有排除某些富文本工具栏选项。

我还没有走到那一步如何保存任何调整。

我的方法正确吗?还是有更整洁、更清洁的方法?

仅供参考,Notes 文档上的字段是富文本类型。然而,内容是“唯一的”文本。目前使用的是 Domino (web) 表单和 Rich Text 类型的字段。

非常感谢任何帮助,因为任何解释/示例代码似乎都很稀缺!

【问题讨论】:

  • 是否需要以传统的 Notes 形式显示数据?还是只是为了存储数据?
  • 您好 Frank,无法通过 Notes 表单编辑该文档(该表单仅适用于 Web)
  • 在 xpages 应用程序中,我们将“RichText”html 作为纯文本存储在字段中,因为在网络上 RichText 不存在。
  • 我正在为一个遗留的 Domino 应用程序应用一个 xpages 接口并在 java 中编写业务逻辑,所以我们有许多带有富文本的文档我不能简单地添加一些额外的字段并忽略内容的富文本字段。 IBM 对此有何建议????

标签: java xpages richtext


【解决方案1】:

跟我说吧:网络上没有 RichText,只有 MIME。

Notes RichText 项可以将数据存储在“经典”RichText 中或作为 Mime 条目。它是您可以在表单的字段属性中设置的属性。您希望将数据存储为 MIME,但内容可能仍然是“经典”富文本。区分两者。

对于经典,您可以使用Convert to HTML 来获取适合网络的字符串。

回写时,您首先删除 Body 字段并使用MimeEntity 重新创建它(请参阅示例代码链接)。

另外this gist 提供了一个粗略的想法,你可以如何编码。

希望有帮助!

【讨论】:

  • 谢谢!我会看看它,然后再试一次。
猜你喜欢
  • 1970-01-01
  • 2014-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-26
  • 1970-01-01
相关资源
最近更新 更多