JSF (Primefaces) ajax обновление нескольких элементов по идентификаторам - PullRequest
31 голосов
/ 18 декабря 2010

Еще один вопрос, касающийся JSF. В частности, Primefaces.Возникла следующая проблема с обновлением 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>

Здесь элемент с идентификатором "count" идет первым, затем элемент с идентификатором "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"/> 

Это нормальное поведение или я пропускаю некоторые параметры?

1 Ответ

68 голосов
/ 18 декабря 2010

Если подлежащий обновлению компонент находится не внутри того же компонента NamingContainer (ui:repeat, h:form, h:dataTable и т. Д.), То необходимо указать «абсолютный " ID клиента. Префикс с : (по умолчанию NamingContainer символ-разделитель) начинается с root.

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

Чтобы быть уверенным, проверьте фактическое значение идентификатора клиента компонента subTotal в сгенерированном HTML. Если он находится, например, внутри h:form, то перед ним также стоит идентификатор клиента, и вам необходимо исправить это соответствующим образом.

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

Разделение идентификаторов пробелами более рекомендуется, так как <f:ajax> не поддерживает разделение запятыми, и в противном случае стартеры могут запутаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...