JSF 2.2中多个(单个)文件上载的最佳实践

时间:2014-12-06 22:50:09

标签: ajax jsf file-upload primefaces

我们的JSF 2.2 Web应用程序可能存在这样的情况:用户必须填写必须上传多个文件的公式。

实施例

First Name: [ John        ]
Last Name:  [ Doe         ]
Photo:      [ choose File ] (no file chosen)
Passport:   [ choose File ] (no file chosen)

我知道有多个上传表单,例如Primefaces,但这不符合我的要求,因为我想知道哪个文件是照片或护照,我需要验证输入,因为这些文件是强制性的。


选项1:多个单个文件上传

第一个选项就像上面的例子。只需使用多个单<h:inputFile>个标记即可。

优点:

  • 用户在要求
  • 时选择文件
  • 用户知道此类文件上传

缺点:

  • 由于有更多<h:inputFile>代码,因此在表单提交期间将处理每个文件上传:因此我们可能必须限制文件大小以便用户不会遇到问题
  • 我没试过:甚至可以在同一个<h:form>上使用多个单个文件上传?

选项2:上传弹出+回调

我有时会看到这一点,并想知道为什么以这种方式实施。当您必须上传文件时,它会打开一个带有文件上传的弹出窗口。上传后,弹出窗口将关闭,表单已选择上传的文件。

这项技术是否有任何提示/教程?特别是窗口间的沟通对我来说还不清楚。

优点:

  • 与标准方式几乎相同

缺点:

  • 弹出窗口阻止程序的问题
  • 对于这种方法,必须实现回退机制:如果用户取消表单怎么办?何时上传文件被删除,以便没有垃圾文件?

选项3:在模态对话框中上传+回调

为了消除弹出窗口拦截器问题,我们可以使用模态对话框进行上传。因此,我们选择上传文件,新模式<p:dialog modal="true"/>打开,<h:inputFile>内部处理您的上传。

我确实尝试了这一点,发现使用<h:inputFile><p:inputFile mode="simple">无法上传AJAX(无法找到BalusC评论的来源,但有一个similar one)。我的整个网站都被重新渲染,我的公式输入丢失了。

优点:

  • 与标准方式几乎相同
  • 弹出窗口拦截器没问题

缺点:

  • 甚至可能?

选项4:“上传管理器”

我的最后一个想法是提供一个上传管理器。这是一个视图,用户可以在列表/表中查看其上传的文件,并使用 <h:inputFile>添加文件,添加说明等。因此,文件已经在系统中,如果没有被引用,则在72小时之后被删除。

用户在必须输入文件时单击链接,然后从模式对话框的列表/表中选择相应的文件。因此,用户必须首先上传他们的文件,甚至在填写表格之前,这是非常痛苦的,所以如果他们也可以在模态对话框中上传文件会很好。 (这看起来像一个视图,他们有一个<h:inputFile>和他们已经上传的文件列表。但是我们有与选项3中相同的AJAX问题......

我看到解决这个问题的唯一方法是在表单的开头写一些内容,如:

For this form you need the following files in your upload manager:
 - Photo
 - Passport

优点:

  • 技术上:好,因为它总是只有一个提交文件(AJAX?)
  • 没有特定的回退机制(除了72小时的cronjob删除未使用的文件)
  • 用户可以为(比如说)接下来的20个表单上传多个文件 - 这在我们的网络应用程序中很好

缺点:

  • 用户不习惯这种技术
  • 甚至可能?

对于这种情况,您还有其他想法吗?我不可能是唯一一个这样的人。 或者像Primefaces这样的多个文件上传是否适合配置验证?

我希望你能帮我解决这个头脑风暴

0 个答案:

没有答案