0

我有一个简单的表单和正文字段。当用户上传附件时,我想删除文档正文字段中已有的任何附件。我怎样才能在我的保存按钮中做到这一点。

我试图在 fileUpload 控件上设置属性以始终将文件名更改为相同的名称,但这不会替换文件,而是添加一个新文件并向其添加一个新的序列号

<xp:fileUpload id="fileUpload1" value="#{userdoc.Body}" filename="profile"     seUploadname="false"></xp:fileUpload>

在保存之前,我还尝试在正文字段中循环所有嵌入的附件,然后删除所有附件,但没有添加我的新附件。

4

2 回答 2

7

有点晚了,但万一有人像我通过谷歌一样来到这里......

还有另一个选项:NotesXSPDocument.getAttachmentList("ritem") 返回文档中的附件列表。每个条目都是DominoDocument.AttachmentValueHolder类型,它有一个 getState() 属性,如果文件已经在文档中或刚刚添加,则返回该属性。要删除文档中已经存在的文件,您可以将此 SSJS 代码添加到保存按钮(假设“文件”是保存文件的富文本项目的名称):

var attList = docFile.getAttachmentList("files");

for(var i=0; i<attList.size(); i++) {
  var att = attList.get(i);

  if (att.getState()==0) {      //STATE_INDOCUMENT: this is the 'old' file: remove it
    docFile.removeAttachment("files", att.getName() );
  } else if (att.getState()==1) {       //STATE_ADDED: this is the new file
           //leave it           
  } 
}
于 2012-08-13T19:32:52.017 回答
3

这可以通过首先删除所有附件(使用 NotesXSPDocument 对象中的 removeAllAttachments 函数)然后手动将上传的文件附加到富文本项来完成。

必须将此 SSJS 代码添加到 XPage / 自定义控件的 beforeRenderResponse-event 中:

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();

存储文件的富文本项目是“Body”,数据源的名称是“document1”。Fileupload 控件是“fileUpload1”。

有两个限制:

  1. 您不能将其与保存按钮一起使用,您必须使用普通按钮/链接来进行完全刷新(请参阅 Serdar Basegmez 上面写的内容)
  2. 您必须在再次上传后刷新页面,否则您将不会在文件下载控件中看到上传的文件(可能对此控件进行部分刷新可能会起作用)。

编辑:

对不起,我的错:您可以在保存文档的提交按钮中使用上面的代码。那你就不用手动刷新页面了!

于 2012-03-29T13:41:12.797 回答