在ajax'close'事件之后,Primefaces 3.5对话框的'visible'属性确实正确更新

时间:2013-09-04 10:08:24

标签: ajax primefaces dialog

解决方案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");
    }
}

1 个答案:

答案 0 :(得分:1)

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

closable="TRUE"

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

我刚注意到对话框不是FORM?

找到了类似的帖子HERE

我觉得hint对你来说,这给了我答案: 只需将oncomple =“someDialog.show()”事件添加到按钮,将widgetVar =“someDialog”添加到对话框 据我所知,接近更改渲染属性,这就是为什么你无法显示它。