triggerChange()函数在JSF中不起作用?

Ans*_*hew 7 javascript jsf primefaces jsf-2

我有一个特定的要求,我必须更新a 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>
Run Code Online (Sandbox Code Playgroud)

JavaScript的

function updateTable() {
    w_menu.triggerChange();
}
Run Code Online (Sandbox Code Playgroud)

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

Hat*_*mam 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>
Run Code Online (Sandbox Code Playgroud)

您应该检查控制台输出,我添加了这些输出oncomplete只是为了确保您没有任何阻止更新过程的验证错误。

如果您有任何验证错误,您应该在这一点上努力以实现您的目标。

注意:默认值event是change。