p: commandbutton的操作与我的要求相反



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

按钮的代码:

<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}"/> 

它让按钮在启动时生效,但当我上传文件并点击按钮时,它会刷新页面,然后变成禁用状态,这正是我想要发生的事情,哈哈,那么这个动作怎么能被逆转呢?我试过在正确和错误的语句之间切换,但这没有起作用,这从未使按钮禁用

我如何翻转控件,使其与现在的操作相反?

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

相关内容

  • 没有找到相关文章

最新更新