2014-11-04 61 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