我有一个带有两个输入的表单:一个字符串,一个文件.
<form:form ...> <form:input type="text" ....> <form:input type="file" ....> </form:form>
如果字符串输入上的验证失败,则控制器将路由回同一视图.发生这种情况时,将保留字符串字段,但选定的文件将丢失.
有没有办法在重新渲染视图时保留选定的文件?
解决方法
确实无法保留文件输入值.就像它在所有浏览器中实现一样.据我所知,它与潜在的安全风险有关,但我从未深入过.
但是有可能实现类似的东西.这就是我们在项目中所做的:
>每个带有fileupload的表单都有一个UUID,只要输入无效,UUID就不会改变.
>我们使用FineUploader在这些编辑阶段异步上传文件,这些文件使用此uuid作为foldername上传到文件夹
>我们维护隐藏的输入(文本)以及对当前上载的引用
>如果没有bindingresult错误我们处理方法中的文件并且oncomplete我们删除上传文件夹
>如果出现错误,我们保留uuid并维护输入字段,这样我们就不会丢失引用.
这现在稳定工作,并且作为一个很好的副作用控制器在某种程度上更容易,在我看来也更清晰,因为我们不再需要这些形式的多部分和另一个控制器只是处理上传.
编辑: – 你可能想要实现一个cronjob来清除废弃的上传!