小编典典

JSF(Primefaces)通过ID对几个元素进行Ajax更新

ajax

有关JSF的另一个问题,尤其是Primefaces。
同时通过id的元素的ajax更新具有以下问题。如果页面上的元素一一对应,则该ajax更新执行正常:

<ui:repeat value="#{showProducts.inCart}" var="cart">
 <td><p:spinner min="0" value="#{cart.count}" immediate="true">
 <p:ajax process="@this" update="count,subTotal"/></p:spinner></td>         
 <td><h:outputText value="#{cart.totalPrice}" id="count"/></td>
 <h:outputText value="#{showProducts.subTotal}" id="subTotal"/>      
</ui:repeat>

ID为“ count”的元素排在第一位,ID为“
subtotal”的元素排在第二位。如果页面上的元素并非严格一一对应,则标识为“小计”的第二个元素不会更新:

    <ui:repeat value="#{showProducts.inCart}" var="cart">
      <td><p:spinner min="0" value="#{cart.count}" immediate="true">
<p:ajax process="@this" update="count,subTotal"/></p:spinner></td>         
      <td><h:outputText value="#{cart.totalPrice}" id="count"/></td>
      <td><h:outputText value="#{cart.place}" /></td>
    </ui:repeat>
    <h:outputText value="#{showProducts.subTotal}" id="subTotal"/>

这是正常行为还是我错过了一些参数?


阅读 313

收藏
2020-07-26

共1个答案

小编典典

如果待更新的组件是不一样的内部NamingContainer组件(ui:repeath:formh:dataTable等),那么你需要指定“绝对”客户端ID。前缀:(默认的NamingContainer分隔符)从根开始。

<p:ajax process="@this" update="count :subTotal"/>

可以肯定的是,检查subTotal生成的HTML中组件的客户端ID以获取实际值。例如,如果它也位于其中h:form,则它也带有其客户端ID前缀,您需要相应地对其进行修复。

<p:ajax process="@this" update="count :formId:subTotal"/>

最好使用ID的空格分隔,因为<f:ajax>它不支持逗号分隔,否则启动器会感到困惑。

2020-07-26