来自 fileUploadListener 的验证消息未显示在 `<p:dialog>` 中

Validation Message from the fleUploadListener not showing inside a `<p:dialog>`

我有一个 <p:dialog> 正在上传文件。

<p:dialog id="uploadFileDialog"
        header="Upload File" widgetVar="uploadFileDialog" 
        modal="true" minHeight="40">
  <p:messages id="fileUploadMsgs" showDetail="true" autoUpdate="true"  
              closable="true" redisplay="false"/>
     <p:fileUpload id="uploadFile" mode="advanced"
                multiple="false" allowTypes="/(\.|\/)(docx|doc|pdf)$/"
                fileUploadListener="#{testMB.uploadFileListener}"
                auto="false" onstart="PF('ajaxStatusDialog').show()"
                oncomplete="PF('ajaxStatusDialog').hide()">    
        </p:fileUpload>
</p:dialog>

在文件上传监听器中,我正在查看数据库中是否已存在文件,如果存在,我需要在对话框中抛出错误并返回。我尝试设置 globalOnly="true" 并在 RequestContext.getCurrentInstance().addMessage 中将客户端 ID 传递为 null,但没有成功。我什至尝试在 addMessage 中传递 <p:messages> 的 id,这也没有用。非常感谢任何帮助。

编辑:我的 fileUploadListener 代码

    public void uploadFileListener(FileUploadEvent event){
            boolean success = false;
        List<Files> fileList = getDbFilesList();            
           if(fileList == null){
                success = handleDocumentUpload(event);
            }else{
                success = false;
                FacesContext.getCurrentInstance().addMessage(
                        "fileUploadMsgs",
                        new FacesMessage(FacesMessage.SEVERITY_ERROR,
                                "Error : ",
                                "File Already Exists."));
            }
        }

我正在使用 primefaces 5.2 和 jsf 2.2。谢谢!

我已经想出了一个让它工作的方法。请参阅下面的更新代码。

<p:dialog id="uploadFileDialog"
        header="Upload File" widgetVar="uploadFileDialog" 
        modal="true" minHeight="40">
<h:form id="testForm>  
<p:messages id="fileUploadMsgs" showDetail="true" autoUpdate="true"  
              closable="true" redisplay="true"/>
     <p:fileUpload id="uploadFile" mode="advanced"
                multiple="false" allowTypes="/(\.|\/)(docx|doc|pdf)$/"
                fileUploadListener="#{testMB.uploadFileListener}"
                auto="false" onstart="PF('ajaxStatusDialog').show()"
                oncomplete="PF('ajaxStatusDialog').hide()" update="fileUploadMsgs">    
        </p:fileUpload>
</h:form>
</p:dialog>

文件上传监听器代码如下:

public void uploadFileListener(FileUploadEvent event){
            boolean success = false;
        List<Files> fileList = getDbFilesList();            
           if(fileList == null){
                success = handleDocumentUpload(event);
            }else{
                success = false;
                FacesContext.getCurrentInstance().addMessage(
                        "testForm:uploadFile",
                        new FacesMessage(FacesMessage.SEVERITY_ERROR,
                                "Error : ",
                                "File Already Exists."));
            }
        }