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