2012-03-07 20 views
2

除了夫妇inputText,我在页面上的一个必需组件是p:fileUpload。所以,当我点击提交,<p:message>显示在有require=true组件,但用户没有输入/选择如何验证p:fileUpload

enter image description here

我想要的红色方框Required也出现旁边的上传组件。这是我尝试过的。

1。当我在p:fileUpload中设置required="true"时,没有任何事情发生(不知道这是否是一个错误)。
2。我把validatorp:fileUpload,下面是我的验证来源

public void validateFileUpload(FacesContext context, UIComponent component, 
     Object value) throws ValidatorException { 
    if(value == null){ 
    FacesMessage message = new FacesMessage(); 
    message.setSeverity(FacesMessage.SEVERITY_ERROR); 
    message.setSummary("Error"); 
    message.setDetail("Required"); 
    throw new ValidatorException(message);  
    } 
} 

当我点击提交没有真正发生,即使是在我经历上传,validateFileUpload没有得到所谓的一切(不知道这是一个错误)

3。当我点击提交时,如果其他所有东西都通过了,并且进入我的操作方法,我可以检查文件是否为空,然后返回一个FacesMessage并让p:growl选取它。但是,我不喜欢这种方式,因为它给用户一种多层验证的感觉。

有没有办法对p进行更好的验证:fileUpload

+1

不知道,但也许我的[最新问题]一个(http://stackoverflow.com/q/9415 059/620338)是相关的。 – 2012-03-08 15:54:17

+0

@MattHandy:我以前见过你的问题。我尝试了'validator'属性和'f:validator',都没有发生。 – 2012-03-08 21:51:29

+0

报告和修正问题:http://code.google.com/p/primefaces/issues/detail?id=3680 – 2012-03-27 03:33:24

回答

2

对于那些有同样问题的人,我在创建向导时遇到了这个问题。我使用的解决方法是将上传的文件存储在我的viewcoped bean的字段中,并在尝试导航到下一步时检查此字段。

向导标签:

<p:wizard id="importBankAccountLogWizard" 
      widgetVar="importBankAccountLogWizard" 
      flowListener="#{bankAccountLogImportBean.onFlowProcess}"> 

文件上传标签(我有渲染和更新属性设置,以便将显示一条消息,并且上传的第一张上传后会被隐藏):

<p:fileUpload id="bankAccountLogFileInput" 
             fileUploadListener="#{bankAccountLogImportBean.setBankAccountLogFile}" 
             rendered="#{bankAccountLogImportBean.renderFileUploadInput}" 
             mode="advanced" 
             update="importBankAccountLogWizard" 
             auto="true" 
             sizeLimit="1000000" /> 

豆:

public void setBankAccountLogFile(FileUploadEvent event) 
{ 
    importFile = event.getFile(); 
    FacesMessage msg = new FacesMessage(Localization.g("FILE_HAS_BEEN_UPLOADED", event.getFile().getFileName())); 
    FacesContext.getCurrentInstance().addMessage(null, msg); 
} 

public String onFlowProcess(FlowEvent event) 
{ 
    if("bankAccountLogImportInputTab".equals(event.getOldStep()) && 
     importFile == null) 
    { 
     FacesMessage msg = new FacesMessage(Localization.g("UPLOAD_A_FILE_TO_CONTINUE")); 
     FacesContext.getCurrentInstance().addMessage(null, msg); 
     return event.getOldStep(); 
    } 

    return event.getNewStep(); 
}