【发布时间】:2013-11-12 09:44:11
【问题描述】:
由于<p:fileUpload> 的required 属性在PrimeFaces 4.0 final 中似乎仍然不起作用,因此我尝试创建一个自定义验证器,如下所示。
@FacesValidator(value="fileUploadValidator")
public final class FileUploadValidator implements Validator
{
@Override
public void validate(FacesContext fc, UIComponent uic, Object o)
throws ValidatorException
{
System.out.println("fileUploadValidator called.");
if(!(o instanceof UploadedFile))
{
FacesMessage message = new FacesMessage();
message.setSeverity(FacesMessage.SEVERITY_ERROR);
message.setSummary("Error");
message.setDetail("Required");
throw new ValidatorException(message);
}
}
}
并用<p:fileUpload>指定。
<p:fileUpload mode="advanced"
required="true"
multiple="true"
allowTypes="/(\.|\/)(gif|jpe?g|png)$/"
fileUploadListener="#{bean.fileUploadListener}">
<f:validator validatorId="fileUploadValidator"/>
</p:fileUpload>
但 validate 方法从未被调用过。由于我在<p:dataGrid> 中显示图像,因此非常需要此验证。有没有办法验证一个空的<p:fileUpload>?
【问题讨论】:
-
我还没有查看 4.0 的源代码,但以下 3.4 的答案可能也适用于 4.0:stackoverflow.com/questions/13865136/…
-
@BalusC :有什么解决方法吗?这当然可以在相应的 JSF 托管 bean 中进行检查,以查看
UploadedFile对象是否为null但这样做会导致一些 JSF/PrimeFaces 组件(如<p:dataTable>)不必要地更新,这反过来又会导致一些对数据库进行昂贵的查询,这是完全错误和笨拙的。 -
理论上,自定义渲染器应该可以。如果不检查来源,就无法从头顶上分辨出来。
标签: validation jsf primefaces jsf-2.2