我有一个特定的要求,我必须通过dataTableonchange事件来更新selectOneMenu,但似乎dataTable没有得到更新。我试图使用triggerChange()函数,但没有运气。请找到以下我尝试过的代码。

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();
}

上面的函数没有被调用,即使我更改了下拉列表中的值,dataTable中的值仍保持不变。

最佳答案

一起拥有processimmediatepartialSubmit是没有意义的。

现在,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的默认值是change。

关于javascript - triggerChange()函数在JSF中不起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26730677/

10-11 08:24