2014-07-10 153 views
2

我正在使用JSF和PrimeFaces,並且我無法處理以下情況:我有一個對話框,並且在其上放置了一個dataTable。在表格的其中一個單元格中,我想以三種不同的方式顯示給定的數據,並且我想在它們之間切換。到目前爲止,我設法通過commandLink在這些渲染類型之間切換,但是我的問題是,當我點擊3個鏈接之一時,對話框關閉!我可以更新對話框的內容,並且能夠同時打開對話框嗎? (我更新其渲染類型通過myMethod的使用)Primefaces:更新對話框內容並保持打開狀態

我commandLink看起來是這樣的:

<p:commandLink id="id" update=":myForm:myDialog" ajax="false" 
       action="#{myBean.myMethod}" oncomplete="dialog.show()"> 

如果我不使用AJAX = false屬性,方法不叫,我也試過imediate = true,但那也不是。

回答

3

您需要定義您的對話框內的p:outputPanel和更新outputpanel,而不是對話本身(這就是爲什麼你的對話框關閉):

<p:dialog id="myDialog" ...> 
    <p:outputPanel id="myOutputPanel"> 
    ... your dialog content goes here 
    </p> 
</p:dialog> 

,改變你的commandlink

<p:commandLink id="id" update=":myForm:myDialog:myOutputPanel" ajax="true" 
      action="#{myBean.myMethod}" oncomplete="dialog.show()"> 

關於oncomplete="dialog.show()" - 我不完全確定你是否需要這個。如果您提供更多關於您的表格和代碼的代碼,則可以給出準確的答案。

+0

我不認爲包括輸出面板和更新它有什麼區別。我遇到了同樣的問題,我在不添加oncomplete =「dialog.show()」的情況下測試了這個理論,對話框仍然關閉。 oncomplete =「dialog.show()」會再次顯示,但它不是理想的解決方案,因爲當對話框消失並重新出現時會出現閃爍。 – jrobertsz66

+0

你不認爲這有什麼區別?嘗試一下,它確實做到了一個。因爲在一種情況下,整個對話框被更新(更新:將其從DOM中移除並重新添加到DOM中),或者在第二個對話框中的輸出面板被更新並且對話框保持不變。 – Manuel

+0

不同之處在於Q的'ajax =「false」(其中onComplete做點工作......)並且使用隱式的'ajax =「true」',所以兩者都是正確的(如果ajax部分沒有改變) – Kukeltje

0

我有同樣的問題,並且解決方案是更新表格而不是對話框。例如:

<p:dialog id="id_dialog" ...> 
    <h:form id="id_form"> 
     ... content 
    </h> 
</p:dialog> 

和commandLink:

<p:commandLink update=":id_form" process="@all" ...> 

這爲我工作!

+0

你的答案與已經給出的答案是完全相同的。唯一的區別是你把一個窗體而不是面板放在裏面。題外話:不建議'process =「@ all」'。當存在多個表單時可能會導致奇怪的效果。 – Kukeltje

+0

謝謝你的建議,但我不同意你的意見。我的答案與給定的答案類似,但有一個很大的區別:此解決方案有效。我也嘗試過給定的解決方案,但沒有成功。好的,'process =「@ all」'不是壞事。 – akelec

相關問題