1

解决方案在这里。(在 bean 中显示和隐藏dialog。)


我有一个dialog和显示/隐藏按钮,效果很好。对话框boolean从支持 bean 读取值并更新它的visible属性(使其显示或隐藏)。一切正常,直到我使用默认关闭按钮关闭对话框,该按钮触发 ajaxclose事件。从那一刻起,显示/隐藏按钮不起作用,或者对话框没有更新它的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");
    }
}
4

1 回答 1

1

也许你可以隐藏那个关闭按钮:

closable="TRUE"

或者您可以通过 onHide 属性更新变量。

我刚刚注意到对话框不在 FORM 中?

在这里找到类似的帖子

这是我认为给你的提示,它给了我答案:只需将 oncomple="someDialog.show()" 事件添加到按钮和 widgetVar="someDialog" 到对话框,因为我了解关闭更改呈现属性,这就是为什么你不能展示下。

于 2013-09-04T10:40:38.613 回答