Forms h:inputFile值在其他输入提交或验证失败后变为空,如何保留其值?

Forms h:inputFile值在其他输入提交或验证失败后变为空,如何保留其值?,forms,validation,file-upload,jsf-2,jsf-2.2,Forms,Validation,File Upload,Jsf 2,Jsf 2.2,对于许多其他标准JSF组件,当表单提交且服务器端验证失败时,页面将再次呈现,并填充先前提交的表单字段,供用户编辑和重新提交。我正在从新的h:inputFile中寻找相同的行为,但我没有找到它 作为一个简单的例子,我有一个带有h:inputText和h:inputFile的表单。inputText已启用服务器端验证。如果用户输入无效文本并选择一个文件并提交,则将上载该文件,并在文本字段中呈现该表单,并显示一条h:消息,指示验证结果。我试图解决的问题是,在这一点上,他们纠正他们的文本输入,但必须再次

对于许多其他标准JSF组件,当表单提交且服务器端验证失败时,页面将再次呈现,并填充先前提交的表单字段,供用户编辑和重新提交。我正在从新的h:inputFile中寻找相同的行为,但我没有找到它


作为一个简单的例子,我有一个带有h:inputText和h:inputFile的表单。inputText已启用服务器端验证。如果用户输入无效文本并选择一个文件并提交,则将上载该文件,并在文本字段中呈现该表单,并显示一条h:消息,指示验证结果。我试图解决的问题是,在这一点上,他们纠正他们的文本输入,但必须再次选择一个文件,并再次上传。我是否缺少一些基本的东西,或者这是我想要的行为

HTML不允许预先填充
,否则会打开一个。由于JSF在这个上下文中只是一个HTML代码生成器,所以它不能对此做很多工作

最好的办法是ajax提交表单,ajax只渲染真正需要更新的部分,例如消息(即不要使用
render=“@form”
)。这样,初始输入值保持不变

例如


另见:
<h:form enctype="multipart/form-data">
    <h:inputText id="text" />
    <h:message id="m_text" for="text" />

    <h:inputFile id="file" />
    <h:message id="m_file" for="file" />

    <h:commandButton value="submit">
        <f:ajax execute="@form" render="m_text m_file" />
    </h:commandButton>
</h:form>