简体   繁体   English

如何在操作完成之前隐藏按钮? Primefaces

[英]How to hide a button until an action is completed? Primefaces

i currently have a file upload system in place, and currently i have a button to take the user to the next page, but this is visible even if the user has not uploaded anything, the danger is here if the user presses this before uploading anything it will throw an error and look bad, so what i am trying to do is hide this button until file upload is successfully achieved, any ideas how ? 我目前有一个文件上传系统,目前我有一个按钮将用户带到下一页,但即使用户没有上传任何内容,这也是可见的,如果用户在上传任何内容之前按下这个,则存在危险它会抛出错误而且看起来很糟糕,所以我要做的是隐藏此按钮,直到成功实现文件上传,任何想法如何?

<p:fileUpload widgetVar="upload" fileUploadListener="#{fileUploadController.handleFileUpload}"
                                  mode="advanced" 
                                  multiple="false" 
                                  update="messages"
                                  label="Select File"
                                  sizeLimit="100000000" 
                                  allowTypes="/(\.|\/)(gif|jpe?g|png|doc|docx|txt|pdf|html)$/"
                                  auto="true"/> 
                    <!-- selected auto="true" this has been selected to prevent user error as was discovered 
                    when testing, some users pressed the upload button and wondered why nothing worked instead of
                    select file, now this stops this -->


                    <p:growl id="messages" showDetail="true"/>

                    Please press the button below once you have uploaded the file, to continue


                    <p:commandButton action="#{navigationBean.naviagtion}"   value="Next"  ajax="False"/> 

the command button of action next is the one i wish to disable untill file upload is complete 操作的命令按钮接下来是我希望禁用直到文件上传完成的按钮

EDIT : 编辑:

<p:commandButton action="#{navigationBean.naviagtion}"   value="Next"  ajax="False" disabled="#{!fileUploadController.UploadComplete}"/> 

Is my command button, it is pointing to the fileUploadContoller, this is where the file upload happens etc, 是我的命令按钮,它指向fileUploadContoller,这是文件上传发生的地方等,

the issue is when i run the app i get a live button always on page load 问题是,当我运行应用程序时,我总是在页面加载时获得一个实时按钮

i have added a boolean onto my fileUploadController : 我在我的fileUploadController上添加了一个布尔值:

    public void handleFileUpload(FileUploadEvent event) {
        //System.out.println("DesintationPDF : " + destinationPDF);
        System.out.println("called handle file");
        System.out.println("Destination is : " + configProp.getProperty("destination"));

        FacesMessage msg = new FacesMessage("Succesful", event.getFile().getFileName() + " is uploaded."); //Displays to user on the webpage
        FacesContext.getCurrentInstance().addMessage(null, msg);


        try {
            copyFile(event.getFile().getFileName(), event.getFile().getInputstream());
        } catch (IOException e) {
//handle the exception
            e.printStackTrace();
        }

    }

    public boolean isUploadComplete() {
        return uploadComplete;
    }

    public void setUploadComplete(boolean uploadComplete) {
        this.uploadComplete = uploadComplete;
    }

but still get the error 但仍然得到错误

EDIT 2 : 编辑2:

     <p:commandButton action="#{navigationBean.naviagtion}"   value="Next" disabled="#{!fileUploadController.uploadComplete}"/> 

the console 控制台

INFO: Upload complete value before copy file false
INFO: upload complete value is : true

so it is changing the value to true 所以它将值更改为true

but is not changing the button to live 但是没有改变生活按钮

To disable your button until the upload finished, just bind the disabled attribute to a property in a bean. 要在上传完成之前禁用按钮,只需将disabled属性绑定到bean中的属性即可。 In my opinion disabling seems much more intuitive than suddenly rendering it. 在我看来,禁用似乎比突然渲染它更直观。 Also the user will know that there's something going on in the background. 用户也会知道后台正在发生一些事情。

 <p:commandButton action="#{navigationBean.naviagtion}" value="Next" disabled="#{bean.disable}" ajax="False"/> 

Since you use PrimeFaces, this solution is the easiest. 由于您使用PrimeFaces,此解决方案是最简单的。 Just replace bean with the name of your bean. 只需用bean的名称替换bean即可。

Edit: 编辑:

public class YourNavigationBean {

    private boolean uploadComplete; // <--- that's the property

    // ... your bean content, like constructors and stuff..
    // ...

    //a setter and a getter is needed, to here they are
    public boolean isUploadComplete() {
       return uploadComplete;
    }
    public void setUploadComplete(boolean uploadComplete) {
       this.uploadComplete = uploadComplete;
    }
}

make the next button as invisible. 使下一个按钮不可见。 maintain a flag = false in the beginning, after successfully uploading the file make the flag as true. 在成功上传文件后,在开头维护一个flag = false,使标志为true。 or at the end of the file upload make next button visible to true; 或者在文件上传结束时,将下一个按钮显示为true;

ON upload complete event set display=block. ON上传完成事件集display = block。

HTML HTML

<form action="#" method="post">
    <input type="file" name="fileInput" id="fileInput" />
    <input type="submit" id="submitbutton" value="submit" style="display:none" />
</form>
<div id="result"></div>

Javascript: 使用Javascript:

$(document).ready(
    function(){
        $('input:file').change(
            function(){
                if ($(this).val()) {
                   document.getElementById("submitbutton").style.display='block'; 
                } 
            }
            );
    });

Live demo: http://jsfiddle.net/E42XA/205/ 现场演示: http//jsfiddle.net/E42XA/205/

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM