web-dev-qa-db-ja.com

IDによる複数の要素のJSF(Primefaces)ajax更新

JSFに関するもう1つの質問、特にPrimefaces。
IDによる要素のajax更新と同時に以下の問題があります。ページ上の要素が1つずつ進む場合、その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」を持つ要素が2番目になります。場合には、ページ上の要素は厳密には1つずつではなく、「小計」IDを持つ2番目の要素は更新されません。

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

それは通常の動作ですか、いくつかのパラメータがありませんか?

32
sergionni

更新するコンポーネントが同じ NamingContainer コンポーネント(ui:repeath:formh:dataTableなど)内にない場合、 「絶対」クライアントIDを指定する必要があります。ルートから開始する:(デフォルトのNamingContainer区切り文字)のプレフィックス。

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

確認するには、生成されたHTMLのsubTotalコンポーネントのクライアントIDで実際の値を確認してください。たとえばh:formなどの内部にある場合は、クライアントIDもプレフィックスとして付けられ、それに応じて修正する必要があります。

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

<f:ajax>はコンマ区切りをサポートしていないため、IDをスペースで区切ることをお勧めします。そうしないと、スターターが混乱します。

68
BalusC