2011-11-21 88 views
1

我在更新primefaces對話框中遇到問題Primefaces對話框沒有更新

當前我正在顯示帶有可編輯格式的某些表單元素的primefaces對話框。 當單擊更改鏈接時,表單中可用的某些輸出文本字段的可用鏈接可用,並且可以在可接受和取消按鈕的對話框中以可編輯格式顯示輸出文本字段。

以下是我正在使用的代碼片段,我打電話給監聽器,我將值設置爲要在可編輯格式的對話框中顯示的屬性,並且每次使用渲染器更新對話框時屬性。

render =對話框的id。

此外,當我試圖更新對話框中的內容我收到一些AJAX錯誤ID找不到。

我也試圖把對話框放在一個面板裏,即使這不起作用。

  <h:panelGrid columns="5" > 
      <h:outputText value="Overrride State Date" /> 
      <p:spacer width="5" height="5" /> 
      <h:outputText value="Overrride End Date" /> 
      <p:spacer width="5" height="5" /> 
      <h:outputText value="New Value"/> 
      <p:calendar value="#{certInquiry.ovrStartDt}" showOn="button"/> 
      <p:spacer width="5" height="5" /> 
      <p:calendar value="#{certInquiry.ovrEndDt}" showOn="button"/> 
      <p:spacer width="5" height="5" /> 
      <h:inputText value="#{certInquiry.newVal}"/> 
      </h:panelGrid> 
      <div align="center"> 
      <p:commandButton value="Accept" 
       oncomplete="xyz.hide()" /> <p:spacer width="10" 
       height="5" /> <p:commandButton value="Cancel" 
       onclick="xyz.hide()" type="reset" /></div> 

       </h:form> 
     </p:dialog> 

這裏我更新使用呈現的屬性對話框,但我不能更新對話框及其仍然顯示以前的數據,當我刷新屏幕數據顯示正確。

請幫我解決這個問題。

在此先感謝。

回答

3

您嘗試使用此代碼:

<p:dialog widgetVar="xyz" > 
    <p:panel id="xyzBody"> 
... 
</p:panel> 
</p:dialog> 


<p:commandButton value="Open dialog" oncomplete="xyz.show()" 
    update="xyzBody" 
    actionListener="fillFieldListener" /> 
+0

工程的魅力.... –

1

首先,你應該張貼的entire XHTML代碼不僅僅是對話的內容和結束標記...

不過,我想我知道在哪裏問題是:您不應該使用對話框的render屬性,它的javascript函數showhide綽綽有餘。另外,您應該知道you can't update something you haven't rendered,因爲在HTML頁面(客戶端/用戶端)中找不到非呈現組件。所有你需要做的是:

<h:form> 
      <p:dialog id="myDialog" header="My Options" widgetVar="xyz" showEffect="fade" hideEffect="fade"> 

      <h:panelGrid columns="5" > 
      <h:outputText value="Overrride State Date" /> 
      <p:spacer width="5" height="5" /> 
      <h:outputText value="Overrride End Date" /> 
      <p:spacer width="5" height="5" /> 
      <h:outputText value="New Value"/> 
      <p:calendar value="#{certInquiry.ovrStartDt}" showOn="button"/> 
      <p:spacer width="5" height="5" /> 
      <p:calendar value="#{certInquiry.ovrEndDt}" showOn="button"/> 
      <p:spacer width="5" height="5" /> 
      <h:inputText value="#{certInquiry.newVal}"/> 
      </h:panelGrid> 
      <div align="center"> 
      <p:commandButton value="Accept" 
       oncomplete="xyz.hide()" /> <p:spacer width="10" 
       height="5" /> <p:commandButton value="Cancel" 
       onclick="xyz.hide()" type="reset" /></div>  
     </p:dialog> 
<p:commandButton value="Update Dialog" action="#{MyBean.MyMethod}" update="MyDialog" /> 
</h:form> 

所以你的窗體應該在對話框外面,這樣更好,更簡單;您可以看到UpdateDialog按鈕位於對話框之外,並在運行操作方法後更新對話框(但也可能會更新對話框中的面板)。 另外我看到,那些接受和取消按鈕只是爲了測試,因爲他們做同樣的事情,沒有任何服務器執行...

0

是你的對話框<ui:include>標籤?

如果是,則檢查頁面的源代碼或html,並驗證該對話框是否僅添加到該頁面一次。(你可能有appendToBody設置爲true

我有這個問題,對話框被添加到正文multiple times(可能是由於JSF生命週期)。這會導致意外的結果,如對話框沒有得到更新。

我解決它由<ui:include>外面取出對話,也可以有條件地呈現你的<ui:include> content

PS:我相信你已經跟隨其他答案喜歡包裝容器內的對話內容。 而@spauny提到你應該發佈所有相關的xhtml代碼。

0

我看到一個關閉,但不是整個圖片,雖然我一直在這條路上,併爲你解答。

如果您在對話框外部有表單,請嘗試將其排列在對話框中。例如,

<p:dialog ...> 
    <h:form> 
     ...contents... 
    </h:form> 
</p:dialog>