我一直在尝试禁用按钮,直到操作完成,然后应该启用该按钮
按钮的代码:
<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}"/>
,则不应禁用该按钮。
你必须把更新放在上传组件中,而不是按钮本身!
希望您的测试没有扰乱您的代码;)