解决方案here。 (在bean中显示和隐藏dialog
。)
我有一个dialog
和显示/隐藏按钮,工作正常。对话框从支持bean读取boolean
值并更新它的visible
属性(使其显示或隐藏)。一切正常,直到我使用默认关闭按钮关闭对话框,该按钮会触发ajax close
事件。从那一刻开始/隐藏按钮不起作用,或者说对话框不会更新它的visible
状态。它永远保持关闭。
我发现,在触发ajax事件后,除对话框visible
属性外,所有内容都正确更新。按钮工作正常,它们正确更新了支持bean(我可以在日志文件中看到它),并且对话框面板也正确更新(我可以看到屏幕上显示正确的showDialog
值。)
我知道还有其他方法来显示/隐藏对话框,但我真的很好奇在这种情况下发生了什么 - 为什么它会这样运作?有没有办法通过从bean读取可见性值来显示对话框(当对话框关闭时更新bean值更重要)?
我的XHTML:
<h:form>
<p:commandButton value="show d1" actionListener="#{testBean.enableShowDialog()}" update=":dialogId"/>
<p:commandButton value="hide d1" actionListener="#{testBean.disableShowDialog()}" update=":dialogId"/>
</h:form>
<p:outputPanel id="dialogId">
showDialog value = #{testBean.showDialog}
<p:dialog header="d1" visible="#{testBean.showDialog}">
<p:ajax event="close" listener="#{testBean.disableShowDialog()}" update=":dialogId"/>
test
</p:dialog>
</p:outputPanel>
支持bean:
@ManagedBean
@ViewScoped
public class TestBean implements Serializable {
private static final Logger LOGGER = LoggerFactory.getLogger("TB");
private boolean showDialog;
public boolean isShowDialog() {
LOGGER.info("getter isShowDialog={}", showDialog);
return showDialog;
}
public void enableShowDialog() {
showDialog = true;
LOGGER.info("isShowDialog set to true");
}
public void disableShowDialog() {
showDialog = false;
LOGGER.info("isShowDialog set to false");
}
}