2012-02-27 47 views
1

我有一個UI:在表格內重複拍賣物品。這是一個普通的html表格,因爲當您點擊一個bid commandLink時,在所選拍賣項目下打開一行,並顯示出價組件。投標commandLink使用AJAX這樣的:關閉UI中的所有展開的行:重複

<f:ajax listener="#{bean.addBidView(lot)}" render="bidView" /> 

addBidView正在更新地圖AuctionItems中的,這就是如何正確選擇行打開。當用戶再次點擊相同的投標鏈接時,addBidView會計算出結果並關閉投標組件。

現在我們假設用戶點擊了多行,從而打開了多個出價組件。他們都開放,但只有一個是積極的。所以這裏是我的問題:當我使用上述ajax時,如何獲取整個循環以便打開出價組件會自動關閉其他開放組件。 (拍賣物品地圖反映的是正確的投標組件,但是隻有這一個投標區域被渲染,所以其他投標區域不受影響,如果我刷新整個頁面,則顯示是正確的,並且問題只存在於I 「M使用AJAX)

這是在頁面上的元素(這一切是H內部的結構:形式:)

<table id="bidstable"> 
    <h:panelGroup id="entireLoop"> 
     <ui:repeat id="repeatAuctionItems" var="auctionItem" varStatus="status" value="#{bean.auctionItems}"> 
      <td>... a bunch of td's with the auction item values ... and then: 
       <h:commandLink id="bid" rendered="#{some conditions}"> 
        <f:ajax listener="#{bean.addBidView(auctionItem)}" render="bidView"/> 
       </h:commandLink> 
      </td> 
     </ui:repeat> 
    </h:panelGroup> 
</table> 

我試圖幾乎每一箇中的元素的組合「渲染「 - 例如:

render="bidView bidsTable" 

或 render =「bidView bidsTable:wholeLoop:repeateAuctionItems」

和我能想到的其他所有線索。什麼都沒有有任何想法嗎?

回答

2

您已在<f:ajax render>屬性中指定了一個客戶端ID,即相對於到當前NamingContainer組件。不以命名容器分隔符字符開頭的客戶端ID(默認爲:)相對於當前的NamingContainer組件。 <ui:repeat>就是這樣一個組件。因此,客戶端ID必須引用<ui:repeat>的孩子。但是你試圖引用的組件實際上是在<ui:repeat>之外。您需要使用絕對客戶端ID來引用它。

要找到絕對客戶端ID,您需要在瀏覽器,右擊打開頁面並做查看源然後找到最接近的父JSF組件的外面<ui:repeat>生成的HTML,這是在您的特定案例<h:panelGroup id="entireLoop">。它會是這個樣子:

<span id="someId:possiblyOtherId:entireLoop"> 

採取的正是這種客戶端ID和<f:ajax render>:前綴它的使用。

<f:ajax ... render=":someId:possiblyOtherId:entireLoop" /> 

如果它包含像j_id_123動態生成的ID,那麼你需要給所有的家長NamingContainer部件,如<h:form>固定ID喜歡<h:form id="someId">

注意,它是不可能引用一個純HTML元素的客戶端ID等<table id="bidsTable">。它必須是一個充滿價值的JSF組件,如<h:dataTable id="bidsTable">

+0

好的,太好了。趕上的是

不是遊戲的一部分。我創建了一個包裝表格的panelGroup,並給它「bidstable」id,現在形式:bidstable的作品。再次感謝BalusC。 – Herzog2012-02-27 15:30:22

+0

不客氣。 – BalusC 2012-02-27 15:36:17

相關問題