2010-12-17 37 views
29

關於JSF的另一個問題,特別是Primefaces。
在id的同時更新元素的ajax有以下問題。 如果頁面上的元素去一個接一個,阿賈克斯更新進行確定:JSF(Primefaces)通過ID的幾個元素的更新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爲「計數」元素先走,然後ID爲「小計」元素變爲第二。 在情況下,不嚴格的逐一與「小計」是第二個元素ID沒有更新頁面上的元素:

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

這是正常的行爲,或我錯過了一些參數?

回答

64

如果待更新的組件是不一樣的NamingContainer組件(ui:repeath:formh:dataTable等)裏面,那麼你需要指定「絕對」客戶端ID。前綴爲:(默認NamingContainer分隔符)從根開始。

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

當然,請檢查生成的HTML中的subTotal組件的客戶端ID以獲取實際值。如果它也在h:form之內,那麼它的前綴也是它的客戶端ID,因此您需要相應地修復它。比較推薦的ID

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

空間分離爲<f:ajax>不支持逗號分隔否則會首發感到困惑。

+4

逗號分隔的ID是否正確?我總是使用空間,從來沒有問題。 – alfonx 2011-05-24 17:14:43

+23

@alfonx:對於''這兩個都是有效的。對於'',只有空格是有效的。 – BalusC 2011-05-24 17:16:32

相關問題