Jsf 使用Primefaces fileUpload在同一表单上处理表单数据和文件上载

Jsf 使用Primefaces fileUpload在同一表单上处理表单数据和文件上载,jsf,file-upload,jsf-2,primefaces,Jsf,File Upload,Jsf 2,Primefaces,我有一个表单,其中包含一些普通表单输入字段,然后是一个文件上载选项。但是,文件上载是可选的。当用户选择一个文件并单击上载按钮时,表单enctype必须设置为multipart/form data,但是如果用户不添加文件而只是单击提交,则enctype必须设置为application/x-www-form-urlencoded,这是默认设置。如果enctype设置不正确,则提交时会出现错误。我曾尝试在按下上传按钮时动态更改enctype,但似乎不起作用 我的页面: <h:form id="m

我有一个表单,其中包含一些普通表单输入字段,然后是一个文件上载选项。但是,文件上载是可选的。当用户选择一个文件并单击上载按钮时,表单
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>

如果我将
multipart/form data
移动到
h:form
标记,那么我可以上传文件,但无法提交页面。有没有办法上传文件并在同一页面上处理普通表单提交?或者是其他方法的建议。

您可能正在使用WlidFly 8。 其他应用服务器(JBossAS6.1)也可以使用类似的示例


看看这个

尝试使用enctype=“multipart/form data”将p:fileUpload放在不同的h:form中。这是我实现目标的唯一途径。你说的“我不能屈服”是什么意思?当你尝试时会发生什么?毫无疑问,您可以尝试使用新的servlet API的
Part
接口方法从多部分请求中提取表单数据。我得到与前面提到的相同错误
UT010016:不是多部分请求
此解决方案最适合我:
UT010016: Not a multi part request