1

我在 PrimeFaces 对话框中有一个 JSF 复合组件,该组件具有dynamic=true( dynamic - 允许使用 ajax 延迟加载内容)。组件在被覆盖的encodeBegin方法内初始化。显示对话框时会发生这种情况。

如果我删除动态属性,则在不显示对话框并破坏现有代码时也会调用 encodeBegin 方法。

是否可以仅在显示对话框时执行复合组件代码?

这是一个代码选择:

<p:dialog id="actionsDialog"
    widgetVar="actionsDialogWidget" resizable="false" width="800"
    height="600" showEffect="fade" hideEffect="fade" modal="true">
    <h:form id="confirmationWizardForm">
        <acme:actionWizard name="wizard" widgetVar="wiz" bean="#{accountsBean}"
            header="#{accountsBean.entityHeader}"
            update="form:genericAccounts" onClose="actionsDialogWidget.hide()" />
    </h:form>
</p:dialog>

...

<p:commandButton value="Add"
    action="#{accountsBean.initializeEntity}" process="@this"
    update=":actionsDialog" oncomplete="actionsDialogWidget.show()">
4

1 回答 1

2

问题是您正在从客户端控制可见性,这意味着对话框的标记会生成但仍被 css 规则隐藏。

例如分析 primefaces对话框展示时可以注意到这一点- 在您按下“基本”命令按钮之前,对话框是隐藏的,但 HTML<div id="basicDialog"...始终存在,即使对话框窗口不可见。

如果对话框被渲染,内容也会被渲染 - 如果没有动态内容加载,就无法阻止它。

添加动态属性会更改行为,因为 ajax 用于在显示对话框时获取对话框(及其内容)。

于 2013-05-22T13:50:38.417 回答