2014-11-26 4 views
1

Я использую Primefaces 5.1 с JSF 2.2.6.invoke confirmDialog в bean-компоненте

Мне нужно определить, существует ли какой-либо файл в папке, когда пользователь загружает файлы (файлы).

У меня есть класс, который использует PrimeFaces, который загружает файлы пользователя в определенную папку, но если пользователь пытается загрузить файл с тем же именем, что и тот, который уже присутствует, мне нужно оповещение и отмена обработчика.

Любая идея?

код в XHTML является:

<h:form enctype="multipart/form-data" id="addFileDialog"> 

     <p:fileUpload fileUploadListener="#{attachmentsComponent.handleFileUpload}" 
         mode="advanced" multiple="true" dragDropSupport="true" 
         label="#{text['tasksbacking.addFile.choose']}" uploadLabel="#{text['tasksbacking.addFile.upload']}" cancelLabel="#{text['tasksbacking.addFile.cancel']}" 
         allowTypes="/(\.|\/)(gif|jpe?g|png|pdf|doc|docx|txt|xml)$/" invalidFileMessage="#{text['tasksbacking.addFile.invalidFile']}" 
         fileLimit="4" fileLimitMessage="#{text['tasksbacking.addFile.invalidCount']}"    
         oncomplete="PF('addfile').hide();"/> 
    </h:form> 

код в бобе:

public void handleFileUpload(FileUploadEvent event) { 

    // vars 
    String originalName = event.getFile().getFileName(); 
    if (log.isDebugEnabled()) { 
     log.debug("create file: " + originalName); 
    } 
    User loggedInUser = getSessionUser(); 

    // define parent folder 
    Folder folder = null; 

    // versionamento 
    FileDetail fileDTSVersion = null; 

    // verifica se ficheiro já existe na folder 
    if (this.selectedNodeAttach != null) { 

     if (this.selectedNodeAttach.getData() instanceof Attachment) { 
      folder = (Folder) (this.selectedNodeAttach.getParent().getData()); 
     } else { 
      folder = (Folder) (this.selectedNodeAttach.getData()); 
     } 
     for (TreeNode tree : this.selectedNodeAttach.getChildren()) { 
      if (tree.getType().equals("file")) { 
       Attachment fileChild = this.attachmentManager.initializeAttachment((Attachment) (tree.getData())); 

       if (fileChild.getName().equals(originalName)) { 
        if (fileChild.getContentObject() instanceof File) { 
         //file already exists --- need confirm action ??????????? 
        } 
       } 
      } 
     } 
    } 

    // guarda ficheiro localmente 
    try { 
     if (log.isDebugEnabled()) { 
      log.debug("saving file in local..." + internalName); 
     } 
     copyFileToDisk(internalName, event.getFile().getInputstream()); 
    } catch (IOException ex) { 
     log.error(null, ex); 
    } 
} 

ответ

2

Вы можете добиться того, что сначала определяя <p:confirmDialog/> в вашем XHTML и показывая его с Managed Bean по отправка JS через контекст запроса, например, так:

XHTML:

<p:confirmDialog widgetVar="dialog" appendToBody="true" header="Erro!"/> 

Контроллер:

RequestContext.getCurrentInstance().execute("PF('dialog').show();") 

Кстати, есть уже другой вопрос, как ваша. Не забудьте выполнить поиск перед отправкой нового вопроса. Calling Primefaces dialog box from Managed Bean function

+0

нормально, но мне нужно ждать ответа в методе handleFileUpload (событие FileUploadEvent), это возможно? – Marin

+1

Не понимаю. Ваш первый вопрос состоял в том, чтобы вызвать диалог с управляемым компонентом. Что вы подразумеваете под «ждать ответа в методе X»? –

Смежные вопросы