表单 – h:输入文件值在其他输入验证失败后变为空白,如何保留其值?

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

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

解决方法

HTML不允许预填充< input type =“file”>因为否则会打开一个 huge security hole.由于JSF在这种情况下只是一个HTML代码生成器,因此它无法做到这一点.

你最好的选择是ajax-submit表单和ajax-render只有真正需要更新的部分,比如消息(即不要使用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>

也可以看看:

> Understanding PrimeFaces process/update and JSF f:ajax execute/render attributes

相关文章

Mip是什么意思以及作用有哪些
怎么测试Mip页面运行情况
MIP安装的具体步骤有哪些
HTML添加超链接、锚点的方法及作用详解(附视频)
MIP的规则有哪些
Mip轮播图组件中的重要属性讲解