2013-10-22 93 views
0

我試圖在ajax命令按鈕請求未成功後更新primefaces表單(嚮導第一步)。進行實際ajax調用的命令按鈕位於對話框中。提交請求後,我想要強制刷新我的視圖。ajax調用提交按鈕後更新primefaces或jsf視圖

命令按鈕從數據表中刪除記錄。它工作正常,記錄被刪除,但當對話框被隱藏時,數據表不斷顯示刪除的記錄。我想強迫它刷新。有任何想法嗎?我可以從我的支持bean reviewManagerBean.deleteProtocol()方法嗎?

下面是代碼(我BackBean是viewScoped):

<h:form id="reviewManagerForm"> 
...  
<pe:masterDetail id="masterDetail" level="#{reviewManagerBean.currentLevel}" showBreadcrumb="false" selectLevelListener="#{reviewManagerBean.levelListener}" > 
    <f:facet name="header" > 
     <h:panelGroup layout="block" style="margin-top: 10px;" > 
      <h:panelGroup styleClass="levelTitle ui-state-default ui-corner-all wizard-breadcrumbs#{reviewManagerBean.currentLevel eq 1 ? 'ui-state-hover' : ''}"> 
       <h:outputText value="1: Protocol picker"/> 
      </h:panelGroup> 
      ... 
      <p:messages id="mainMessagesPanel" showDetail="true" closable="true" /> 
     </h:panelGroup>   
    </f:facet> 
    <pe:masterDetailLevel level="1">   
     <p:panel id="panel1" header="List of available protocols">     
      <p:dataTable id="protocolsDataTable" var="cRProtocol" rowKey="#{cRProtocol.revProtId}" value="#{reviewManagerBean.cRReviewProtocolList}" 
       widgetVar="protocolsTable" 
       ... 
       selection="#{reviewManagerBean.selectedReviewProtocol}" 
       selectionMode="single" > 
       ... 
       <p:ajax event="rowSelect" listener="#{reviewManagerBean.setSelectedRow}" /> 
       <p:ajax event="rowUnselect" listener="#{reviewManagerBean.unsetSelectedRow}"/> 
       ... 
       <p:column sortBy="#{cRProtocol.revProtTitle}" headerText="Title" style="width:200px;text-align:center;"> 
        <h:outputText value="#{cRProtocol.revProtTitle}" /> 
       </p:column> 
       ... 
       <p:column> 
        <p:commandButton value="Delete" onclick="dlg5.show()" 
         update=":reviewManagerForm:deleteSingleProtocol" 
         disabled="#{reviewManagerBean.checkifProtocolIsOpen(cRProtocol)}" 
         ajax="true" process=":reviewManagerForm:deleteSingleProtocol" />     
       </p:column>   
      </p:dataTable>     
     </p:panel> 
    ... 
    <p:dialog id="dialog-deleteprotocol" header="Delete Image Type" widgetVar="dlg5" dynamic="true" modal="true" resizable="false">     
     <p:panelGrid id="deleteSingleProtocol"> 
     <p:row> 
      <p:column> 
       <h:outputText value="Id:" style="font-weight:bold; padding-right:10px" /> 
      </p:column> 
      <p:column> 
       <h:outputText value="#{reviewManagerBean.selectedReviewProtocol.revProtId}" /> 
      </p:column> 
     </p:row> 
     ... 
      <p:column> 
       <p:commandButton id='protocolDelete' 
        value='Delete' 
        action='#{reviewManagerBean.deleteProtocol()}'               
        ajax="true" 
        onclick="dlg5.hide()" icon="ui-icon-disk" 
        update=":reviewManagerForm:protocolsDataTable" 
        process=":reviewManagerForm:deleteSingleProtocol" /> 
      </p:column> 
     </p:row> 
    </p:panelGrid>    
</p:dialog> 
+2

你的數據表應該被正確的重新渲染,否則你會得到一個異常。這意味着'#{reviewManagerBean.cRReviewProtocolList}'會再次被調用。你是否從該清單中刪除該項目?否則,這應該是問題。你應該從'#{reviewManagerBean.deleteProtocol'刷新列表。 – Magnilex

+0

你是對的Magnilex ...我的思想被挫敗了!謝謝 – thanili

+0

太好了。將此作爲回答發佈,以便您可以接受並將問題標記爲已解決。 – Magnilex

回答

0

你的數據表中應適當地重新渲染,你會得到一個例外,否則(像組件與ID:reviewManagerForm:protocolsDataTable能未被發現)。

這意味着#{reviewManagerBean.cRReviewProtocolList}將再次被調用。您需要從該列表中刪除該項目。這從#{reviewManagerBean.deleteProtocol}適當地完成。

#{reviewManagerBean.cRReviewProtocolList}在刪除後被調用時,您的數據表會被更新。

相關問題