2014-11-04 9 views
7

Ho un requisito specifico in cui devo aggiornare un dataTable per l'evento onchange di un selectOneMenu ma sembra che il dataTable non venga aggiornato. Ho provato ad utilizzare la funzione triggerChange(), senza fortuna. Si prega di trovare il codice qui sotto che ho provato.triggerChange() non funzionante 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(); 
} 

La funzione di cui sopra non viene chiamato, ed i valori nella dataTable rimangono invariate anche, io modificare il valore nella cadere in picchiata.

risposta

2

Avere process, immediate, partialSubmit tutti insieme è inutile.

Ora lo scopo principale dell'ajax è chiamare triggerChange() quindi non è necessario attivarlo manualmente dall'evento onchange.

Prova a semplice il processo avente la seguente:

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

Si dovrebbe controllare l'output della console, ho incluso il oncomplete solo per assicurarsi che non si dispone di eventuali errori di convalida che impediscono l'aggiornamento processi.

Se si dispone di errori di convalida, è necessario lavorare su tale punto per raggiungere il proprio obiettivo.

Nota: il valore predefinito di event è il cambiamento.

+0

Grazie mille, Hatem !! :) –

+0

Prego. –