使用富文本控件中的replaceItemValue设置文档字段?

时间:2013-04-02 21:43:56

标签: xpages

如何使用富tect控件中的replaceItemValue设置richText值?

我在这里找到了这段代码: http://www.bleedyellow.com/blogs/martin/entry/save_a_richtext_field_from_a_xpage_to_a_document?lang=en_us

var doc = configuratieformulieren.getDocumentByKey("ConfiguratieIVNL", true);
if(doc == null){
    return;
}else{    
    var titel = getComponent("inputTextIBPTitelIVNL").getValue();
    doc.replaceItemValue("IBPTitel",titel);    
   var inhoud = getComponent("inputRichTextIBPInhoudIVNL").getValue();
   if (inhoud != null){ 
   var contentType = doc.getMIMEEntity("IBPInhoud").getContentType();
   var encoding = doc.getMIMEEntity("IBPInhoud").getEncoding();
   var str = session.createStream();
   inhoud.toString();
   str.writeText(inhoud.toString());
   doc.getMIMEEntity("IBPInhoud").setContentFromText(str, contentType, encoding);    
 }

 doc.save(true, true);
}
sessionScope.put("FormulierIVNLInfoBeschPG","Lezen");

这是对的吗?看起来这段代码取决于该字段已经存在的事实。如果字段不存在,如何处理id?是否有更简单的方法将字段值设置为富文本控件的内容?

2 个答案:

答案 0 :(得分:3)

让数据来源做繁重的工作。有关原因的冗长而枯燥(但彻底)的解释,请阅读this article。但这是快速版本:

不要使用:

getComponent("someID").getValue()

相反,请使用:

someDataSource.getValue("someFieldName")

这始终是一种更有效的数据访问方式:不必通过组件树来查找匹配项,而是直接进入数据源,如果你问它是什么,组件必须要求它价值是。

同样,不要使用:

someDataSource.replaceItemValue("someFieldName", someValue)

相反,请使用:

someDataSource.setValue("someFieldName", someValue)

后者在输入类型上更灵活。数据源已包含用于根据值是文本,日期,数字,富文本,文件上载等来确定要执行的操作的所有逻辑。无需在您自己的代码中复制任何逻辑。

因此,如果目标是根据当前文档中的数据更新单独的文档,只需定义一个指向要更新的文档的单独文档数据源。然后就是这么简单:

configData.setValue("RichTextData", currentDocument.getValue("RichTextData"));
configData.save();

使用上面的代码,如果您在当前文档中指定的字段是富文本,那么它在另一个文档上创建的项目将是富文本。如果它是当前文档中的任何其他类型,则它将与另一个文档上的类型相同。使用getValue()setValue(),您无需关注数据类型......数据源会为您处理所有这些内容。

对于奖励积分,范围configDataapplicationScope,以便对所有用户立即缓存对其的任何更新...或sessionScope如果您要更新的文档是用户 - 具体

答案 1 :(得分:0)

我能够解决我的原始问题。为了扩展我的问题,我在使用对话框从表单/文档A使用表单A上的对话框创建表单/文档B时遇到问题。表单B的任何更改都将保存到文档A&#39 ; s datasource。

我在表格B的数据源上找到了ingoreRequestParams,设置它并解决了表格B写入表格A文档的问题。