xPages中的文件上载验证

时间:2012-09-11 13:09:22

标签: validation xpages

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

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

有人知道用户实际选择文件的验证方式吗?

2 个答案:

答案 0 :(得分: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;
    }
    
  3. 这两个解决方法仅在新创建文档时才有效。一旦附加了文件,这两个选项就不再起作用了。

    如果要查看现有文档,可以在此处使用此XSnippet: http://openntf.org/XSnippets.nsf/snippet.xsp?id=replace-attachment-when-uploading-a-new-attachment

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

    希望这有帮助

    斯文

答案 1 :(得分: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验证程序才会显示错误。