這可以通過首先刪除所有附件(使用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