2014-11-04 58 views
7

我有一個具體的要求,我必須更新dataTableonchange事件selectOneMenu但似乎dataTable沒有得到更新。我試過使用triggerChange()函數,但沒有運氣。請找到我嘗試過的下面的代碼。triggerChange()函數在JSF中不起作用?

XHTML

<p:selectOneMenu id="id" style="width:250px" 
       value="#{priceCharterMBean.traffic.id}" 
       required="true" 
       requiredMessage="Traffic is required" 
       filter="true" 
       filterMatchMode="startsWith" 
       widgetVar="w_menu" 
       onchange="updateTable();"> 
    <p:ajax event="change" process="@this" 
      listener="#{priceCharterMBean.loadTEI}" 
      update="aTEModelList" 
      immediate="true" 
      partialSubmit="true" /> 
    <f:selectItem itemLabel="Select" itemValue="" 
       noSelectionOption="true" /> 
    <f:selectItems value="#{priceCharterMBean.trafficModelList}" 
       var="traffic" itemLabel="#{traffic.loadTrafficList}" 
       itemValue="#{traffic.id}" /> 
</p:selectOneMenu> 

<p:dataTable style="width:350px" id="aTEModelList" var="aTEModelList" value="#{priceCharterMBean.aTEModelList}" rowKey="#{aTEModelList.id}"> 
    <p:column style="display: none"> 
    <f:facet name="header"> 
     <h:outputText value="Expense Id" /> 
    </f:facet> 
    <h:outputText id="expId" value="#{aTEModelList.id}" /> 
    </p:column> 
    <p:column> 
    <f:facet name="header"> 
     <h:outputText value="Expense Short Description" title="#{text.expenseshortdescription}" /> 
    </f:facet> 
    <h:outputText id="expenseShortDesc" value="#{aTEModelList.expenseShortDescription}" /> 
    </p:column> 
    <p:column> 
    <f:facet name="header"> 
     <h:outputText value="Actual Expense Value" title="#{text.actualexpensevalue}" /> 
    </f:facet> 
    <h:inputText id="actualTrafficExpense" maxlength="8" value="#{aTEModelList.actualTrafficExpense}" /> 
    </p:column> 
</p:dataTable> 

的JavaScript

function updateTable() { 
    w_menu.triggerChange(); 
} 

上述功能不被調用,並在數據表中的值保持不變,即使,我在更改值落下。

回答

2

process,immediate,partialSubmit所有在一起是毫無意義的。

現在ajax的主要目的是致電triggerChange(),因此不需要通過onchange事件手動觸發它。

具有嘗試簡單的過程如下:

<p:selectOneMenu value="#{priceCharterMBean.traffic.id}"> 
    <p:ajax process="@this" update="aTEModelList" 
      oncomplete="console.log('validation: ' + args.validationFailed)" /> 
</p:selectOneMenu> 

您應該檢查控制檯輸出,我已經包括了oncomplete只是爲了確保你沒有這阻止更新任何驗證錯誤處理。

如果您有任何驗證錯誤,您應該在這一點上工作,以達到您的目標。

注意:event的默認值是變化的。

+0

非常感謝,Hatem !! :) – 2014-11-05 05:33:51

+0

不客氣。 – 2014-11-05 08:29:02