我一直在尝试禁用按钮,直到操作完成,然后应该启用该按钮
按钮的代码:

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

这是bean fileuploadcontroller它是一个托管的、视图范围的bean
    private boolean uploadComplete;

            uploadComplete = false;
            System.out.println("Upload complete value before copy file " + uploadComplete);
            copyFile(event.getFile().getFileName(), event.getFile().getInputstream());


        } catch (IOException e) {
//handle the exception
            e.printStackTrace();
        }

    }



    public void copyFile(String fileName, InputStream in) throws IOException {
        try {
            uploadComplete = true;

//does things

    public boolean isUploadComplete() {
        return uploadComplete;
    }

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

在控制台中,我将其设置为每次上传时输出打印完成从false更改为true,我得到:
INFO: Upload complete value before copy file false
INFO: upload complete value is : true

正如您所看到的值从false变为true,问题是按钮再也不会变为活动状态,为什么会这样?
工作正常,没有错误等,只是按钮问题
编辑:
经过一些测试,我发现这个代码:
<p:commandButton id="Nav" action="#{navigationBean.naviagtion}"   value="Next"  ajax="False" update ="Nav" disabled="#{fileUploadController.uploadComplete}"/>

它使按钮在启动时生效,但当我上传文件并点击按钮时,它会刷新页面,然后变为禁用,这就是我想要发生的事情的确切位置lol,那么这个动作怎么能被重新设定呢?我试过交换真假语句,但这不起作用,这从未使按钮失效
我怎样才能翻转控件使其与现在的操作相反

最佳答案

our latest conversation之后,我看了一下official documentation
我发现,就像sujoy评论的,p:fileOupload有一个属性,在上传完成后呈现组件。因此,您可以通过将update添加到Nav来更新update="Nav"。这样你的按钮应该被正确地重新渲染。
另外,您可能应该将<p:fileUpload>切换回disabled="#{fileUploadController.uploadComplete}"/>,因为如果disabled="#{!fileUploadController.uploadComplete}"/>,则不应禁用该按钮。
你必须把更新放在上传组件中,而不是按钮本身!
希望您的测试没有扰乱您的代码;)

09-12 06:08