3

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

按钮的代码:

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

在控制台中,我将其设置为每次 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}"/> 

它使按钮在启动时生效,但是当我上传文件并单击按钮时,它会刷新页面然后变为禁用状态,这与我想要发生的事情完全相反,哈哈,那么这个动作怎么能被尊重?我曾尝试交换正确和错误的陈述,但这没有用,这从未使按钮禁用

我怎样才能翻转控件,使其与现在做的相反

4

1 回答 1

1

我们最近一次谈话之后,我查看了官方文档
我发现,就像 Sujoy 评论的那样,p:fileOupload有一个属性update,它在上传完成后呈现一个组件。因此,您Nav通过添加update="Nav"到您的<p:fileUpload>. 这样你的按钮应该被正确地重新渲染。
另外,也许您应该切换disabled="#{fileUploadController.uploadComplete}"/>disabled="#{!fileUploadController.uploadComplete}"/>if ,因此不应禁用uploadComplete == true该按钮。您必须将更新放在上传组件中,而不是按钮本身! 希望您的测试没有弄乱您的代码;)

于 2013-02-17T19:54:20.083 回答