2011-05-20 96 views
1

我嘗試使用JSF 2和primefaces 2.2爲selectOneMenu調用ajax調用。 actionListener方法正在被調用。但是我在update屬性中指定的列沒有更新。當我提到頁面時,我可以找到更新的值。請幫我解決這個問題。Ajax調用但頁面刷新後才更新相關字段

我使用的代碼是

<h:form id="mainForm" prependId="false"> 
<p> 
<p:tabView> 
     <p:tab title="Receipt"> 

    <p:dataTable id="table1" var="recepit" rowIndexVar="rowIndex" value="#{ReceiptDetailsBean.iterativeList}" scrollable="true" height="120px" styleClass="leftTable"> 

      <p:column style="background-color: #EFF2F9"> 
       <f:facet name="header"> 
        <h:outputText value="SL NO" /> 
      </f:facet> 
        <h:outputText value="#{rowIndex+1}" /> 

      </p:column> 

      <p:column > 
       <f:facet name="header"> 
        <h:outputText value="Buss." /> 
       </f:facet> 

         <h:selectOneMenu id="selectOneCb4" value="#{ReceiptDetailsBean.bussCode}" > 
          <f:selectItem itemLabel="V_BUSS_CODE" itemValue=""/> 
          <f:selectItems value="#{ReceiptDetailsBean.rdetails}" var="model" itemLabel="#{model.buss}" itemValue="#{model.buss}"/> 
          <p:ajax update="table1:#{rowIndex}:receiptCode, table1:#{rowIndex}:referenceType" actionListener="#{ReceiptDetailsBean.obtainReceiptDatabasedOnBussCode}" event="change"/> 
         </h:selectOneMenu> 

      </p:column> 

      <p:column> 
       <f:facet name="header"> 
        <h:outputText value="Receipt Code" /> 
       </f:facet> 
        <h:inputText value="#{ReceiptDetailsBean.receiptCode}" id="receiptCode" style="font-family: verdana;font-size: 10px;width:80px;height:15px" onkeypress="return showForhotKey(event,'#{rowIndex}');"/> 

      </p:column> 

      <p:column> 
       <f:facet name="header"> 
        <h:outputText value="Ref Type" /> 
       </f:facet> 
        <h:inputText value="#{ReceiptDetailsBean.receiptType}" id="referenceType" style="font-family: verdana;font-size: 10px;width:80px;height:15px" onkeypress="return showForhotKey(event,'#{rowIndex}');"/> 

      </p:column> 
    </p:dataTable> 
     </p:tab> 

     <p:tab title="Print"> 

     </p:tab> 
+0

重複http://stackoverflow.com/q/6016948/620338 – 2011-05-20 07:16:15

回答

1

嘗試f:ajax代替p:ajax和重新渲染整個表單,以獲得更接近問題的根源:

<h:selectOneMenu id="selectOneCb4" value="#{ReceiptDetailsBean.bussCode}" > 
    <f:selectItem itemLabel="V_BUSS_CODE" itemValue=""/> 
    <f:selectItems value="#{ReceiptDetailsBean.rdetails}" var="model" 
        itemLabel="#{model.buss}" itemValue="#{model.buss}"/> 
    <f:ajax render="@form" 
      listener="#{ReceiptDetailsBean.obtainReceiptDatabasedOnBussCode}"/> 
</h:selectOneMenu> 

這應該是在說我的回答你以前的問題。

+0

謝謝你的回覆馬特。我早些時候嘗試過,但整個表單都刷新了。我不想刷新整個表單,因爲它包含許多數據表。我會怎麼做才能渲染dataTable中的特定列。 – Sarath 2011-05-20 07:52:59

+0

@Sarath我不知道這是否可能。我曾經在(部分)dataTable更新中遇到過一些麻煩,並且總是以表格的形式更新整個表格(是否嘗試使用f:ajax?)或包裝h:panelGroup。 – 2011-05-20 09:09:45

+0

非常感謝您的寶貴意見馬特 – Sarath 2011-05-20 09:54:02

1

從dataTable中的組件觸發的dataTables和ajax更新的dataTables的部分更新不適用於Primefaces的2.2版本。這是在版本3中可能已經解決的已知錯誤。

您可以嘗試的一個建議是對每個dataTable使用單個表單,並且只更新該表單中的元素。