Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Validation p:fileUpload required=";“真的”;自定义验证程序不';行不通_Validation_Jsf_Primefaces_Jsf 2.2 - Fatal编程技术网

Validation p:fileUpload required=";“真的”;自定义验证程序不';行不通

Validation p:fileUpload required=";“真的”;自定义验证程序不';行不通,validation,jsf,primefaces,jsf-2.2,Validation,Jsf,Primefaces,Jsf 2.2,由于的required属性在PrimeFaces 4.0 final中似乎仍然不起作用,因此我尝试创建一个自定义验证器,如下所示 @FacesValidator(value="fileUploadValidator") public final class FileUploadValidator implements Validator { @Override public void validate(FacesContext fc, UIComponent uic, Objec

由于
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);      
        }
    }
}
并用
指定


但是validate方法从未被调用。由于我在
中显示图像,因此非常需要进行此验证。有没有办法验证空的

试试这个

@ManagedBean(name = "docBean")
@ViewScoped
public class DocumentBean implements Serializable
{
  private UploadedFile file;

  public void handleFileUpload(FileUploadEvent event)
  {
     uploadedFile = event.getFile();
   }

   //action
   public void viewImage()
  {
    if(uploadFile==null){
     FacesContext saveContext = FacesContext.getCurrentInstance();
     saveContext.addMessage(null, new FacesMessage("Error", "Upload file  required"));
   }
 }
}

我还没有查看4.0的源代码,但3.4的以下答案可能也适用于4.0:@BalusC:有什么解决方法吗?当然,这可以在相应的JSF托管bean中进行检查,以查看
UploadedFile
对象是否为
null
,但这样做会导致一些JSF/PrimeFaces组件,如
被不必要地更新,导致在数据库上启动一些代价高昂的查询,这显然是错误和笨拙的。理论上,自定义渲染器应该这样做。如果不检查源代码,就无法从头判断。这可以在托管bean中完成,但它毕竟不是一个验证器,在填充托管bean中的任何相关属性/字段之前,它就被调用并执行其工作。
@ManagedBean(name = "docBean")
@ViewScoped
public class DocumentBean implements Serializable
{
  private UploadedFile file;

  public void handleFileUpload(FileUploadEvent event)
  {
     uploadedFile = event.getFile();
   }

   //action
   public void viewImage()
  {
    if(uploadFile==null){
     FacesContext saveContext = FacesContext.getCurrentInstance();
     saveContext.addMessage(null, new FacesMessage("Error", "Upload file  required"));
   }
 }
}