我需要執行數據庫中的作用,取決於 結果我需要關閉該窗口,右後更新的信息更新其他兩個 panelGroups
你可以不用從java代碼調用動作就可以做到這一點
不知道您的精確佈局,你所要求的任務通常會是這樣的:
<p:commandLink
process="@form"
actionListener="#{bean1.updateDatabase}"
update="j_idt3:panelGroupHolde;j_idt3:center_westBody"
oncomplete="if (args.updateSuccessfull) PF('dlgConfirmApplicationDelete').hide();">
和你bean1.updateDatabase
方法裏面,你根據查詢的實際結果來確定args.updateSuccessfull
。
Boolean updateSuccessfull = false;
RequestContext.getCurrentInstance().addCallbackParam("updateSuccessfull", updateSuccessfull);
在你提到的順序的例子並不重要,因爲每個動作都會有它的預定結果,並致力於在生命週期中的規定相(更新總是前的onComplete):
- 如果更新查詢失敗,數據不會更改,因此
update=
不會有任何影響,並且由於CallBack-Param,對話框保持可見。
- 如果更新查詢有效,數據確實會更改,兩個UI元素都會更新(其順序無關緊要),並且由於CallBack-Param的原因,對話框將被隱藏。
如果不是這種情況,那麼你有RenderResponse
-PHASE,它更應被在InvokeApplication
-PHASE(或更早)執行的內部代碼。
使後一個常見misstake是調用從XHTML「含有重碼方法」(而其他物品(「第二更新」)依賴於值以及),像
<ui:repeat values="#{bean1.queryDatabaseForXY()}" ...>
顯然現在第二次更新需要在第一次更新之後,因爲它還需要來自bean1.queryDatabaseForXY()
的一些數據。
不是,你應該在適當的階段進行數據加載和/或計算和簡單地指的是getter
生成響應時返回一個已知的集合:
<ui:repeat values="#{bean1.getUsers()}" ...>
或多個precicesly
<ui:repeat values="#{bean1.users}" ...>
(實際加載可能是@PostConstruct
,<f:viewAction>
或只是視圖或會話範圍內的bean已存在的列表)
爲什麼不使用一個單獨的方法與布爾訪問或類似這樣? –
你是否在等待用戶確定執行第二個動作?!? –
不等待用戶。在用戶點擊對話窗口上的按鈕後,我需要在數據庫中執行一個操作,根據結果,我需要關閉窗口,並在更新其他兩個panelGroup後使用更新的信息。 – Neliosam