我在PrimeFaces对话框中有一个JSF复合组件,dynamic
= true(动态 - 允许使用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()">
答案 0 :(得分:2)
问题在于您正在控制来自客户端的可见性,这意味着会生成对话框的标记,但仍会被css规则隐藏。
这可以被注意到例如分析素数dialog showcase - 在那里,对话框被隐藏,直到您按下“基本”命令按钮,但HTML <div id="basicDialog"...
始终存在,即使对话框窗口不可见。
如果对话框被渲染,那么内容也是如此 - 没有动态内容丢失就没有停止。
添加动态属性会改变行为,因为ajax用于在显示对话框时(及其内容)获取对话框。