update form example ajax jsf primefaces

form - JSF(Primefaces) actualización ajax de varios elementos por ID''s



process jsf (1)

Una pregunta más sobre JSF.Particularmente, Primefaces.
Tener el siguiente problema con la actualización de elementos ajax por id''s al mismo tiempo. Si los elementos en la página van uno por uno, la actualización de ajax se realiza correctamente:

<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>

Aquí el elemento con id "count" va primero, luego el elemento con id "subtotal" va en segundo lugar. En el caso, los elementos en la página no son estrictamente uno por uno, ese segundo elemento con id "subtotal" no se actualiza:

<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"/>

¿Es un comportamiento normal o extraño algunos parámetros?


Si el componente que se va a actualizar no está dentro del mismo componente NamingContainer ( ui:repeat , h:form , h:dataTable , etc.), entonces debe especificar el ID del cliente "absoluto". Prefijo con : (el NamingContainer separador NamingContainer predeterminado) para iniciar desde la raíz.

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

Para estar seguro, verifique el ID del cliente del componente subTotal en el HTML generado para el valor real. Si también está dentro, por ejemplo, un h:form , también está prefijado con su ID de cliente y deberá corregirlo en consecuencia.

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

La separación de ID de espacios es más recomendable ya que <f:ajax> no admite la separación de coma y, de lo contrario, los iniciadores se confundirían.