如何使用富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?是否有更简单的方法将字段值设置为富文本控件的内容?
答案 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()
,您无需关注数据类型......数据源会为您处理所有这些内容。
对于奖励积分,范围configData
到applicationScope
,以便对所有用户立即缓存对其的任何更新...或sessionScope
如果您要更新的文档是用户 - 具体
答案 1 :(得分:0)
我能够解决我的原始问题。为了扩展我的问题,我在使用对话框从表单/文档A使用表单A上的对话框创建表单/文档B时遇到问题。表单B的任何更改都将保存到文档A&#39 ; s datasource。
我在表格B的数据源上找到了ingoreRequestParams,设置它并解决了表格B写入表格A文档的问题。