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

时间:2015-05-27 14:45:56

标签: forms validation file-upload jsf-2 jsf-2.2

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

作为一个简单的例子,我有一个带有h:inputText和h:inputFile的表单。 inputText启用了服务器端验证。如果用户输入无效文本并选择文件并提交,则上载文件并使用文本字段中的无效文本和表示验证结果的h:消息呈现表单。我试图解决的问题是,此时他们更正了他们的文本输入,但必须再次选择一个文件,然后再次上传。有什么基本的我缺少,或者这是预期的行为?

1 个答案:

答案 0 :(得分:2)

HTML不允许预填充<input type="file">,否则会打开huge security hole。由于JSF在这种情况下只是一个HTML代码生成器,因此无法对此做很多事情。

您最好的选择是ajax-submit表单和ajax-render only 真正需要更新的部分,例如消息(即不要使用render="@form")。这样初始输入值就会保持不变。

E.g。

<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>

另见: