对于许多其他标准JSF组件,当提交表单并且服务器端验证失败时,将再次呈现页面,并填写先前提交的表单字段以供用户编辑和重新提交。我正在寻找新的h:inputFile中的相同行为,而我却找不到它。
作为一个简单的例子,我有一个带有h:inputText和h:inputFile的表单。 inputText启用了服务器端验证。如果用户输入无效文本并选择文件并提交,则上载文件并使用文本字段中的无效文本和表示验证结果的h:消息呈现表单。我试图解决的问题是,此时他们更正了他们的文本输入,但必须再次选择一个文件,然后再次上传。有什么基本的我缺少,或者这是预期的行为?
答案 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>