我一直在尝试使用禁用按钮,直到操作完成,然后启用按钮
按钮的代码:
<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时将其设置为out print,我得到:
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,那么如何能够尊重这个动作?我试过交换真实和错误的陈述,但这不起作用,这从未使按钮禁用
如何翻转控件,使其与现在正在做的相反
答案 0 :(得分:1)
在our latest conversation之后,我查看了official documentation
我发现,就像Sujoy评论的那样,p:fileOupload
有一个属性update
,它在上传完成后呈现一个组件。因此,您需要通过将Nav
添加到update="Nav"
来更新<p:fileUpload>
。这样你的按钮就可以正确地重新渲染了
也许您应该将disabled="#{fileUploadController.uploadComplete}"/>
切换回disabled="#{!fileUploadController.uploadComplete}"/>
,因为如果uploadComplete == true
,按钮应该不被禁用。
您必须在上传组件中放置更新,而不是按钮本身!
希望您的测试没有搞砸您的代码;)