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"/>
それは通常の動作ですか、いくつかのパラメータがありませんか?
更新するコンポーネントが同じ NamingContainer
コンポーネント(ui:repeat
、h:form
、h: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をスペースで区切ることをお勧めします。そうしないと、スターターが混乱します。