1

根据这篇文章 http://www-10.lotus.com/ldd/ddwiki.nsf/revisions/6A9EDD911827AA13852574EA00388F8F?OpenDocument 简单验证应该适用于文件上传控件。我正在尝试在 extLib Form 表中使用它。

我想验证用户是否选择了一个文件,但无法让它在服务器端验证中工作。也尝试使用自定义验证器,但仍然没有运气。其他必填字段被标记为很好,但不是上传控件。

有谁知道如何验证用户实际选择了一个文件?

4

2 回答 2

5

验证仅适用于客户端验证。有一些解决方法:

  1. 验证文件是否已附加的最简单方法是将验证字段添加到表单并设置数据源的属性computeWithForm="onsave"。只要您想保存文档,就会引发验证错误并中断保存。验证字段是一个简单的可编辑字段,其验证公式如下:

    @If(@Attachments = 0;@Failure("No File attached!");@Success)
    
  2. 在querySave事件中检查您的数据源:

    if( document1.getAttachmentList("Body").isEmpty() ){
        var msg = new javax.faces.application.FacesMessage("No File added!");
        facesContext.addMessage( "No File!", msg );
        return false;
    }
    

这两种解决方法仅在文档是新创建的情况下才有效。附加文件后,这两个选项不再起作用。

如果你想检查已经存在的文档,你可以在这里使用这个 XSnippet:http://openntf.org/XSnippets.nsf/snippet.xsp?id=replace-attachment-when-uploading-a-new- attachment

然后,您必须修改 XSnippet 以满足您的要求并添加一条消息(如第二个示例所示)。

希望这可以帮助

斯文

于 2012-09-12T10:08:40.600 回答
0

我知道几个月前就有人问过这个问题并得到了回答,但是当我发现这个时,我今天正在寻找同样问题的答案。

尽管 Sven 的回答没有直接帮助,但选项 #2 为我的解决方案提供了最后的提示。也许它也可以对其他人有用:

首先,我的页面使用标准按钮(不是“提交”类型的按钮,因为我需要设置一些隐藏字段以及可编辑的字段)。因此,在最终保存完成之前,我将此脚本添加到我的按钮代码中:

var numAtts = myDocDatasource.getAttachmentList("Body").size();
if(numAtts == 0){
    var msg = new javax.faces.application.FacesMessage("You need to attach a file");
    facesContext.addMessage("File validation error", msg);
    return false;
}
//do some more stuff
...
myDocDatasource.save();

我必须意识到 fileUpload 控件的内容在验证时并不重要,因为在该过程的那个阶段,上传的文件已经是数据源的一部分。

不过,此验证步骤的“时机”有点令人惊讶:至少在我的情况下,其他字段的验证是在文件上传验证之前完成的:在 errorMessages 控件中,首先只列出标准验证错误。只有在所有其他字段都已成功验证后,我的 fileUpload 验证器才会显示其错误。

于 2013-05-23T23:23:38.647 回答