对于许多其他标准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