o:inputFile可选并接受验证

时间:2016-09-21 13:18:35

标签: jsf jsf-2.2 omnifaces

我想在我的表单中添加一个可选的“attach screenshot”字段,所以我使用的是o:inputFile组件:

<o:inputFile id="file" required="false" maxsize="1048576"  accept="image/png,image/gif" />

如果我将该字段留空,则会出现错误:附加屏幕截图:媒体类型的文件''与'image / png,image / gif'不匹配

如何使该验证可选?

1 个答案:

答案 0 :(得分:1)

这是由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' 
              : '*/*'}"

我将根据issue 315为即将推出的OmniFaces 2.6修复此问题。