这可以通过首先删除所有附件(使用NotesXSPDocument对象中的removeAllAttachments函数),然后手动将上载的文件附加到richtext项来完成。
这SSJS代码已被添加到XPage的beforeRenderResponse事件/自定义控制:
var con = facesContext.getExternalContext();
var request:com.sun.faces.context.MyHttpServletRequestWrapper = con.getRequest();
var map:java.util.Map = request.getParameterMap();
var fileDataName = getClientId('fileUpload1') ;
var fileData:com.ibm.xsp.http.UploadedFile = map.get(fileDataName);
if(fileData == null){
return;
}
var tempFile:java.io.File = fileData.getServerFile();
var correctedFile = new java.io.File(tempFile.getParentFile().getAbsolutePath() +
java.io.File.separator + fileData.getClientFileName());
var success = tempFile.renameTo(correctedFile);
try{
document1.removeAllAttachments("Body");
}catch(e){}
var rtFiles:NotesRichTextItem = null;
if(!(document1.getDocument().hasItem("Body"))){
rtFiles = document1.getDocument().createRichTextItem("Body")
}else{
rtFiles = document1.getDocument().getFirstItem("Body");
}
rtFiles.embedObject(lotus.domino.local.EmbeddedObject.EMBED_ATTACHMENT, "",
correctedFile.getAbsolutePath(), null);
correctedFile.renameTo(tempFile);
document1.save();
在文件存储的富文本项是“身体”,数据源的名称为“文档1 ”。 Fileupload控件是“fileUpload1”。
有两个限制:
- 你不能保存按钮使用这个,你必须使用一个普通按钮/链接,这使得完全刷新(看什么的Serdar Basegmez上面写的)
- 你必须在再次上传后刷新页面,否则在文件下载控制中不会看到上传的文件(也许可以对该控件进行局部刷新)。
编辑:
对不起,我的错:您可以使用上面这段代码的提交按钮,保存文档。那么你不要必须手动刷新页面!
因为它已经在该阶段附加了新文件。因此,您也正在删除我认为最后附加的文件(您可能会在删除前测试它打印附件名称)。 – 2012-03-29 13:06:15