我想添加一个可选的"附加截图"字段到我的表单,所以我使用0:inputFile组件:
<o:inputFile id="file" required="false" maxsize="1048576" accept="image/png,image/gif" />
如果我留下空白字段,我得到一个错误:附加截图:媒体类型的文件"不匹配'image/png,image/gif'
我如何使验证是可选的?
这是由MyFaces中的意外行为引起的。它在Mojarra中工作得很好,当没有选择文件时给出null
。然而,MyFaces给出了一个非空的Part
实例,其文件名为空,大小为0。该空Part
的内容类型默认为application/octet-stream
,因此从不匹配指定的accept
属性。
现在,您最好的选择是根据当前阶段ID和文件大小使accept
属性成为有条件的。我们希望它总是在渲染响应阶段评估,在其他阶段,只有当文件大小大于0时,否则默认accept
为*/*
。
accept="#{facesContext.currentPhaseId.ordinal eq 6
or component.submittedValue.size gt 0
? 'image/png,image/gif'
: '*/*'}"
我将根据315期修复即将到来的OmniFaces 2.6。