2013-05-22 34 views
1

我在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

當對話框沒有顯示時,你是否設置'visible'或'rendered'爲false? – dratewka

+0

不,我沒有任何控制對話框渲染的屬性。 – Seitaridis

+0

所以你控制它在客戶端的可見性? – dratewka

回答

2

的問題是,你正在控制從客戶端,這意味着,在該對話框的標記被產生,但仍然由CSS規則隱藏的可見性。

這可以注意到例如分析primefaces dialog showcase - 在那裏,對話被隱藏,直到你點擊「基本設置」命令按鈕,但HTML <div id="basicDialog"...是那裏所有的時間,即使對話窗口是不可見的。

如果對話框被渲染,內容也是如此 - 沒有動態內容編碼就沒有停止。

添加動態屬性會改變行爲,因爲ajax用於在顯示對話框時(及其內容)獲取對話框。