2014-11-04 17 views
7

Mam określony wymóg, gdy muszę zaktualizować dataTable przez onchange wydarzenie z , ale wydaje się, że dataTable nie jest aktualizowana. Próbowałem użyć funkcji triggerChange(), bez powodzenia. Proszę znaleźć poniższy kod, który próbowałem.Funkcja triggerChange() nie działa w 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(); 
} 

Powyższa funkcja nie została wywołana, a wartości w DataTable pozostają niezmienione nawet, zmienić wartość w upuścić.

Odpowiedz

2

Posiadanie process, immediate, partialSubmit wszystko razem jest bezcelowe.

Teraz głównym celem ajaxu jest wywołanie triggerChange(), dlatego nie ma potrzeby uruchamiania go ręcznie przez zdarzenie onchange.

Spróbuj prostego procesu poprzez następujące:

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

Należy sprawdzić wyjścia konsoli, I zostały objęte oncomplete tylko upewnić się, że nie masz żadnych błędów sprawdzania poprawności, które uniemożliwiają aktualizację proces.

Jeśli masz błędy w sprawdzaniu poprawności, powinieneś pracować nad tym punktem, aby osiągnąć swój cel.

Uwaga: domyślna wartość event to zmiana.

+0

Wielkie dzięki, Hatem !! :) –

+0

Nie ma za co. –