2014-11-04 5 views
7

Ich habe eine spezifische Anforderung, wo ich ein dataTable von onchange Ereignis eines selectOneMenu aktualisieren muss, aber es scheint, dass die DataTable nicht aktualisiert wird. Ich habe versucht, triggerChange() Funktion zu verwenden, ohne Glück. Bitte finde den folgenden Code, den ich ausprobiert habe.Funktion triggerChange() funktioniert nicht in 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(); 
} 

Die obige Funktion nicht aufgerufen wird erhalten, und die Werte in der Datatable gleich bleiben, obwohl, ändere ich den Wert in der Dropdown-Liste.

Antwort

2

Mit process, immediate, partialSubmit alles zusammen ist sinnlos.

Jetzt ist der Hauptzweck des Ajax, triggerChange() aufzurufen, so dass es nicht notwendig ist, es manuell durch das Ereignis onchange auszulösen.

Versuchen Sie einfach den Prozess der durch folgenden Eigenschaften:

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

Sie Ihre Konsole Ausgabe überprüfen sollten, ich die oncomplete nur um sicher zu machen enthalten haben, dass Sie die das Update verhindern keine Validierungsfehler haben verarbeiten.

Wenn Sie Validierungsfehler haben, sollten Sie an diesem Punkt arbeiten, um Ihr Ziel zu erreichen.

Hinweis: Der Standardwert der event ist Änderung.

+0

Vielen Dank, Hatem !! :) –

+0

Gern geschehen. –