【问题标题】:invoke confirmDialog in bean在bean中调用confirmDialog
【发布时间】:2015-01-25 01:36:27
【问题描述】:

我将 Primefaces 5.1 与 JSF 2.2.6 一起使用。

当用户上传文件(primefaces)时,我需要确定文件夹中是否已经存在一个文件。

我有一个使用 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>

bean中的代码是:

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);
    }
}

【问题讨论】:

    标签: jsf-2 primefaces


    【解决方案1】:

    您可以通过首先在 XHTML 中定义 &lt;p:confirmDialog/&gt; 并通过请求上下文发送 JS 将其与托管 Bean 一起显示来实现,如下所示:

    XHTML:

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

    控制器:

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

    顺便说一句,已经有另一个和你一样的问题了。请记住在发布新问题之前进行搜索。 Calling Primefaces dialog box from Managed Bean function

    【讨论】:

    • 好的,但是我需要等待方法handleFileUpload(FileUploadEvent event)的响应,有可能吗?
    • 我不明白。您的第一个问题是关于从托管 Bean 调用对话框。 “在方法 X 中等待响应”是什么意思?
    猜你喜欢
    • 2012-12-26
    • 2012-05-14
    • 2014-08-10
    • 2014-03-16
    • 1970-01-01
    • 2015-10-05
    • 2014-02-11
    • 1970-01-01
    • 2019-06-22
    相关资源
    最近更新 更多