回发后未呈现h:form属性enctype =“ multipart / form-data”

时间:2018-12-04 15:31:42

标签: jsf file-upload mojarra

我有一个带有文件上传组件的表单:

<h:form id="form" enctype="multipart/form-data">
   ... 
   <h:inputFile id="file" value="#{importController.file}" label="File:"></h:inputFile>
   ...
</h:form>

和具有Part属性的viewscoped支持bean

@Named
@ViewScoped
public class ImportController implements Serializable {
    ...
    private Part file;
    // getters and setters omitted
}

如果用户首先尝试正确填写表格中的所有内容,则逻辑工作正常。但是,如果在POST之后出现验证错误(即缺少某些文本字段),则将使用已发布的数据和验证消息再次呈现该页面,则将显示不具有enctype="multipart/form-data"属性的表单。如果用户更正值,再次选择要上传的文件并提交表单,则会导致问题。然后将引发异常“非多部分请求”。

我尝试用primefaces p:fileUpload替换本机jsf h:inputFile,但是行为类似。对于素数的情况,不会抛出异常,但是由于缺少呈现形式的enctype,所以根本不会注入支持bean中的UploadedFile属性。

我使用javavscript修复了此问题,该问题在页面加载后强制使用enctype,但这不是正确的方法。那么,这是正确的行为还是错误,还是我缺少基本的东西?

表单的某些部分是使用Ajax动态加载的,但inputFile组件并非如此。但是,缺少的enctype不是由ajax调用引起的,而是在POST之后立即重新呈现页面时丢失了它,此后没有再调用ajax。

Wildfly 12.0.0.Final,Mojarra 2.3.3.SP1,Primefaces 6.2

0 个答案:

没有答案