3

我有以下要求:我们有一个页面,要求用户将一些数据输入到由各种输入字段和下拉列表组成的表单中。特别是,恕我直言,在这个表单中是文件上传的一部分。用户应该能够上传一些(多个)文件。然后当他/她在页面末尾按下提​​交时,整个输入将被提交并写入一个对象。在此对象中,还必须保存上传文件的路径。我想用 primefaces' (3.4) 组件实现文件上传。

现在面对我的挑战:fileUpload 需要它自己的 h:form,enctype 为“multipart/form-data”。其他数据在“正常”范围内。对我来说,这意味着我必须在页面内将表单一个接一个地放置。但是fileUpload组件应该显示在另一个表单的中间。

我怎样才能做到这一点?有任何想法吗?

最好的问候,弗洛里安

4

1 回答 1

4

现在面对我的挑战:fileUpload 需要它自己的 h:form,enctype 为“multipart/form-data”。其他数据在“正常”范围内。对我来说,这意味着我必须在页面内将表单一个接一个地放置。

老实说,这没有任何意义。我不知道你是怎么得出这个结论的。也许您是基于对问题的错误观察得出的结论。也许您使用了错误的 bean 范围,并且在处理表单提交时遇到了所有迄今为止输入的输入和先前上传的文件的空值。@ViewScoped只要您通过多个 ajax 请求与同一个视图进行交互,您就应该使用相同的 bean 实例。

您可以将“普通”输入字段完美地放在<h:inputText>multipart/form-data编码相同的形式中。使用这种编码,HTTP 请求只是以稍微不同的格式发送,从而为二进制内容留出空间。有关详细背景说明,另请参阅rich:popupPanel 和 t:dataList 下的 h:commandLink 的参数未传递给支持 bean 。

也可以看看:


与具体问题无关,我不知道如何解释

在此对象中,还必须保存上传文件的路径

但我想指出,您绝对不能依赖发送到服务器的完整客户端文件路径。这只会在使用 IE 浏览器时发生,因为该浏览器中存在安全漏洞。您应该对或风格的文件内容感兴趣。您应该自己自动生成一个具有唯一名称的(临时)文件,如有必要,基于唯一的文件名(并确保第二个上传的文件巧合相同的文件名不会覆盖它)。另请参阅如何从 Firefox 3 中的 HTML 输入表单获取文件路径InputStreambyte[]

于 2012-11-20T13:26:16.103 回答