首页 文章

JSF2(和Primefaces):用于另一个“普通”形式的文件上载形式,如何做到这一点?

提问于
浏览
3

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

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

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

最好的问候,弗洛里安

1 回答

  • 4

    现在我的挑战:fileUpload需要自己的h:form,其中包含enctype“multipart / form-data” . 其他数据在“正常”范围内 . 对我来说,这意味着我必须将表单放在页面中 .

    这实在是没有意义 . 我不确定你是怎么得出这个结论的 . 也许你基于对问题的错误观察得出结论 . 也许您使用了错误的bean作用域,并在处理表单提交时遇到所有到目前为止输入的输入和以前上载的文件的空值 . 如果您希望生成相同的bean实例,只要您通过几个ajax请求与同一视图进行交互,就应该使用 @ViewScoped .

    您可以使用 multipart/form-data 编码以完全相同的形式完美地输入"normal"输入字段,例如 <h:inputText> . 使用此编码,HTTP请求只是以稍微不同的格式发送,这允许二进制内容的空间 . 有关详细背景说明,另请参见params not getting passed to backing bean for h:commandLink under rich:popupPanel and t:dataList .

    另见:


    Unrelated 具体问题,我不知道如何解释

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

    但我想指出,你绝对不能依赖发送到服务器的完整客户端文件路径 . 这只会在使用IE浏览器时由于该浏览器中的安全漏洞而发生 . 您应该对 InputStreambyte[] 的文件 contents 感兴趣 . 你应该自己生成一个具有唯一名称的(临时)文件,如果有必要的话,基于唯一的文件名(并确保第二个上传的文件具有相同的文件名不会覆盖它) . 另见How to get the file path from HTML input form in Firefox 3

相关问题