【发布时间】:2014-08-25 11:45:41
【问题描述】:
我有一个包含一些普通表单输入字段和一个文件上传选项的表单。但是,文件上传是可选的。当用户选择一个文件并单击上传按钮时,表单enctype 必须设置为multipart/form-data 但是如果用户没有添加文件而只是单击提交,那么enctype 必须设置为application/x-www-form-urlencoded,即默认值。如果enctype 设置不正确,我会在提交时出错。我曾尝试将enctype 动态更改为它按下的上传按钮,但这似乎不起作用。
我的页面:
<h:form id="master">
... some fields and other stuff
<p:fileUpload value="#{controller.file}" mode="simple"/>
<p:commandButton
onstart="document.getElementById('master').enctype = 'multipart/form-data';"
value="Upload" ajax="false" actionListener="#{controller.uploadFile}" />
<p:commandButton value="Submit" id="submit"
actionListener="#{controller.buttonSubmit}"
validateClient="true" ajax="false"/>
</h:form>
使用此设置,当我尝试上传文件时出现错误:
UT010016: Not a multi part request
如果我将multipart/form-data 移动到h:form 标记,那么我可以上传文件,但我无法提交页面。有没有办法在同一页面上上传文件并处理正常的表单提交?或者也许是另一种方法的建议。
【问题讨论】:
-
尝试使用 enctype="multipart/form-data" 将 p:fileUpload 放在不同的 h:form 中。这是我实现这一目标的唯一方法。
-
“我不能提交”是什么意思?当你尝试时会发生什么?按道理,您可以尝试使用新的 servlet API 的
Part接口方法从多部分请求中提取表单数据 -
我得到与
UT010016: Not a multi part request提到的相同的错误
标签: jsf file-upload jsf-2 primefaces